Форма редактирования Django на основе добавляет форму?

Я решил это путем добавления категории к NSMutableArray.

Редактирование: Удаленный ненужный метод благодаря ответу Ladd.

Редактирование: Измененный (arc4random() % nElements) к arc4random_uniform(nElements) благодаря ответу Gregory Goltsov и комментариям miho и Редактирования blahdiblah

: улучшение Цикла, благодаря комментарию Редактирования Ron

: Добавленная проверка, что массив не пуст благодаря комментарию Mahesh Agrawal

//  NSMutableArray_Shuffling.h

#if TARGET_OS_IPHONE
#import <UIKit/UIKit.h>
#else
#include <Cocoa/Cocoa.h>
#endif

// This category enhances NSMutableArray by providing
// methods to randomly shuffle the elements.
@interface NSMutableArray (Shuffling)
- (void)shuffle;
@end


//  NSMutableArray_Shuffling.m

#import "NSMutableArray_Shuffling.h"

@implementation NSMutableArray (Shuffling)

- (void)shuffle
{
    NSUInteger count = [self count];
    if (count <= 1) return;
    for (NSUInteger i = 0; i < count - 1; ++i) {
        NSInteger remainingCount = count - i;
        NSInteger exchangeIndex = i + arc4random_uniform((u_int32_t )remainingCount);
        [self exchangeObjectAtIndex:i withObjectAtIndex:exchangeIndex];
    }
}

@end
44
задан mpen 6 December 2009 в 03:18
поделиться

2 ответа

Если вы расширяете форму из ModelForm, используйте аргумент ключевого слова instance . Здесь мы передаем либо существующий экземпляр , либо новый, в зависимости от того, редактируем мы или добавляем существующую статью. В обоих случаях для экземпляра установлено поле author , поэтому commit = False не требуется. Также обратите внимание, что я предполагаю, что только автор может редактировать свои собственные статьи, отсюда и ответ HttpResponseForbidden.

from django.http import HttpResponseForbidden
from django.shortcuts import get_object_or_404, redirect, render, reverse


@login_required
def edit(request, id=None, template_name='article_edit_template.html'):
    if id:
        article = get_object_or_404(Article, pk=id)
        if article.author != request.user:
            return HttpResponseForbidden()
    else:
        article = Article(author=request.user)

    form = ArticleForm(request.POST or None, instance=article)
    if request.POST and form.is_valid():
        form.save()

        # Save was successful, so redirect to another page
        redirect_url = reverse(article_save_success)
        return redirect(redirect_url)

    return render(request, template_name, {
        'form': form
    })

И в вашем urls.py :

(r'^article/new/$', views.edit, {}, 'article_new'),
(r'^article/edit/(?P<id>\d+)/$', views.edit, {}, 'article_edit'),

То же редактировать представление используется как для добавления, так и для редактирования, но только шаблон URL редактирования передает идентификатор в представление. Чтобы это хорошо работало с вашей формой, вам нужно опустить поле author в форме:

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        exclude = ('author',)
100
ответ дан 26 November 2019 в 21:55
поделиться

У вас может быть скрытое поле идентификатора в форме, и для формы редактирования оно будет передано вместе с формой для добавления формы, которую вы можно установить его в req.POST, например

formData =  req.POST.copy()
formData['id'] = getNewID()

, и передать эти formData в форму

2
ответ дан 26 November 2019 в 21:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: