Модель Django автоматически устанавливает поля - PullRequest
3 голосов
/ 01 мая 2011

У меня есть форма, позволяющая пользователям публиковать статьи. Таблица article связана с таблицей users, поэтому мне нужно установить поле user_id в зависимости от того, кто пишет. Обычно форма django будет отображаться в раскрывающемся списке, чтобы я мог выбрать автора, но это не так для пользователя.

I have the following code:

if request.method == 'POST':
    ArticleForm = ArticleForm( request.POST )
    if ArticleForm.is_valid():
        article = ArticleForm.save ()
        return render( request, 'success.html' )
else:
    ArticleForm = ArticleForm()

return render( request, 'post.html', {'ArticleForm': ArticleForm} )

Как установить поле перед проверкой запроса, который не будет выполнен, если нет, поскольку определенные поля должны быть заданы кодом, а не на основе данных запроса?

1 Ответ

2 голосов
/ 01 мая 2011

Предполагая, что вы убедитесь, что пользователь вошел в систему.

models.py:

Article(models.Model):
    text = modesl.TextField()
    user = models.ForeignKey(User)

forms.py:

ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        exclude = ('user',)

views.py:

article = Article(user=request.user)   

if request.method == 'POST':
    form = ArticleForm(request.POST, instance=article)
    if form.is_valid():
        form.save()
        return HttpResponse('success')
else:
    form = ArticleForm(instance=article)

Другой способ установить данные перед сохранением - использовать:

if form.is_valid():
    art = form.save(commit=False)
    art.user = request.user
    art.save()
    return HttpResponse('Success')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...