为新对象保存所有内容,除了Djang中的许多字段

2024-10-02 02:33:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用ManyToMany关系保存对象。当我提交表单时,除了有ManyToMany关系的字段之外,所有的东西都保存了

这些是我的文件:

#Forms.py
class ExamForm(ModelForm):
    class Meta:
        model = Exam
        fields = '__all__'

#Models.py
class Exam(models.Model):
    questions = models.ManyToManyField(Question)
    title = models.CharField(max_length=250)
class Question(models.Model):
    title = models.CharField(max_length=250)
    answer = models.TextField(null=True, blank=True)

#Views.py
def add_exam(request):
    if request.method == "POST":
        form = ExamForm(request.POST)
        if form.is_valid():
            new_exam = form.save(commit=False)
            new_exam.save()
            return redirect('view_exam')
    else:
        form = ExamForm()
    template = 'add_exam.html'
    context = {'form': form}
    return render(request, template, context)

这些代码有什么问题?


Tags: pyformmodel关系titlemodelsrequestmax
1条回答
网友
1楼 · 发布于 2024-10-02 02:33:01

正如docs所解释的,当您使用commit=False时,表单无法设置多对多关系,因为对象还没有ID。因此您需要调用表单的额外save_m2m()方法:

if form.is_valid():
    new_exam = form.save(commit=False) 
    # Add some modifications
    new_exam.save()
    form.save_m2m()
    return redirect('view_exam')

但是这里没有理由这样做。您不应该只使用commit=False然后立即保存模型。这是为了在保存之前修改对象,这里不做。直接保存即可:

   if form.is_valid():
        form.save()
        return redirect('view_exam')

相关问题 更多 >

    热门问题