【问题标题】:Add model relation to ModelForm before saving在保存之前将模型关系添加到 ModelForm
【发布时间】:2017-08-12 10:10:21
【问题描述】:

models.py

from django.db import models

class Author(models.Model):
    name = models.CharField(max_length=32)

class Article(models.Model):
    author = models.ForeignKey(Author, on_delete=models.SET_NULL, null=True)
    content = models.TextField()

forms.py

from django import forms
from .models import Article

class ArticleForm(forms.ModelForm):
    class Meta:
        model = Article
        fields = ['content']

在我的 Web 应用程序中,作者登录并写了一篇文章。所以很明显,当作者看到一个 ArticleForm 时,他/她不需要在 ArticleForm 中填写作者字段,因为应用程序已经通过使用会话变量知道作者是谁。

这是我尝试添加作者的方式:

views.py

from django.shortcuts import render, redirect, get_object_or_404
from django.contrib.auth.decorators import login_required

from .models import Article
from .forms import ArticleForm

@login_required
def new_article(request):
    author_name = request.session['author_name']
    author = Author.objects.get(name=author_name)

    if request.method == 'POST':
        form = ArticleForm(request.POST)
        if form.is_valid():
            form.save(commit=False)
            form.author = author  # I suspect the mistake is here
            # I also tried form.author = author.id
            form.save()
            return redirect('success')
    else:
        form = ArticleForm()

    return render(request, 'writings/new_article.html', {'form': form})

查看数据库表时,author_id 列始终为NULL。我的方法有什么问题?如何在保存 ModelForm 之前添加模型关系?

【问题讨论】:

    标签: django django-models django-forms


    【解决方案1】:

    捕获从form.save(commit=False) 返回的对象并修改它而不是表单。例如:

    if form.is_valid():
        article = form.save(commit=False)
        article.author = author
        article.save()
        return redirect('success')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 1970-01-01
      • 2013-06-12
      • 2015-08-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多