gpt4 book ai didi

python - Django ModelForm 不保存添加到 request.POST 或通过 form.save(commit=False) 添加的数据

转载 作者:太空宇宙 更新时间:2023-11-03 16:06:35 26 4
gpt4 key购买 nike

我有 django 表单,已提交到显示它的 View ,并希望在保存之前向其中添加一些数据,但它似乎不起作用。

models.py:

from django.contrib.auth.models import User
from django.db import models

class Profile(models.Model):
user = models.OneToOneField(User)
display_name = models.CharField(max_length=145, blank=True, null=True)
bio = models.CharField(max_length=1000, blank=True, null=True)

class Module(models.Model):
name = models.CharField(max_length=45)
semester = models.CharField(max_length=40)
prof = models.ForeignKey('Profile', null=True, blank=True)

forms.py:

class ModuleForm(ModelForm):
class Meta:
model = Module
fields = ['name', 'semester']

views.py:

我尝试将 prof 添加到 request.POST,然后将其传递给 moduleform,但它会保存从 提交的所有其他数据HTML,除了 prof

prof = Profile.objects.get(user=request.user)
if request.method == 'POST':
mtb = request.POST._mutable
request.POST._mutable = True
request.POST['prof'] = str(prof.id)
request.POST._mutable = mtb
moduleform = ModuleForm(request.POST)
moduleform.save()

我也尝试使用 commit=False 进行保存,但 prof 仍未添加。

moduleform.save(commit=False)
moduleform.prof = prof
moduleform.save()

最佳答案

请参阅 django's official documentation 中的示例:

form = PartialAuthorForm(request.POST)
author = form.save(commit=False)
author.title = 'Mr'
author.save()

就您的情况(未经测试):

if request.method == 'POST':
form = ModuleForm(request.POST)
object = form.save(commit=False)
object.prof = Profile.objects.get(user=request.user)
object.save()

编辑:为了澄清您对我的回答的评论:

moduleform.save(commit=False)
moduleform.prof = prof
moduleform.save()

不起作用,因为表单永远不会在实例上保存prof,因为它不是字段的一部分。这就是为什么您必须在模型级别设置 prof

关于python - Django ModelForm 不保存添加到 request.POST 或通过 form.save(commit=False) 添加的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39718015/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com