一个后ModelForm已经提交,我怎么可以添加一个外键关系,让她能够验证?
models.py
class Comment(models.Model):
id = models.AutoField(primary_key=True)
activity = models.ForeignKey(Activity)
submitter = models.ForeignKey(User)
creation_date = models.DateTimeField(auto_now_add=True)
content = models.TextField()
Run Code Online (Sandbox Code Playgroud)
forms.py
class CommentForm(forms.ModelForm):
content = forms.CharField(widget=forms.Textarea)
class Meta:
model = Comment
Run Code Online (Sandbox Code Playgroud)
views.py
def index(request, id=None):
activity_instance = Activity.objects.get(pk=1)
submitter_instance = User.objects.get(id=1)
newComment = CommentForm(request.POST)
newComment.activity = activity_instance
newComment.submitter = submitter_instance
if newComment.is_valid(): # <-- false, which is the problem
Run Code Online (Sandbox Code Playgroud)
我认为你正在将表单实例与模型实例混合在一起.你newComment是一个表单,将其他对象指定为表单属性不会使表单保存外键(不知道你在哪里找到这种用法),因为所有表单数据都保存在form.data其中,这是一个类似于数据结构的字典.
我不确定你的表单是什么样的,因为你没有排除外键,所以它们应该作为下拉列表呈现,你可以选择它们.如果您不希望用户选择外键但选择按照您当前的方式分配值,则应将其排除在表单中,以便form.is_valid()通过:
class CommentForm(forms.ModelForm):
content = forms.CharField(widget=forms.Textarea)
class Meta:
model = Comment
exclude = ('activity', 'submitter')
Run Code Online (Sandbox Code Playgroud)
views.py
def index(request, id=None):
activity_instance = Activity.objects.get(pk=1)
submitter_instance = User.objects.get(id=1)
comment_form = CommentForm(request.POST)
if comment_form.is_valid():
new_comment = comment_form.save(commit=False)
new_comment.activity = activity_instance
new_comment.submitter = submitter_instance
new_comment.save()
Run Code Online (Sandbox Code Playgroud)
关于save()方法的 Django doc .