我有django表单提交到显示它的视图,并希望在保存之前添加一些数据,但它似乎无法正常工作。
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()
答案 0 :(得分:1)
请参阅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
,因为它不是fields
的一部分。这就是您必须在模型级别设置prof
的原因。