我对今天发布的所有问题表示歉意,但我对这个问题感到心有余而力不足。Django - 验证并保存带有editable = false字段的ModelForm
我想制作一个Q &视频网站的一个东西,我试图让问题通过AJAX提交。
问题型号:
class Question(models.Model):
user = models.ForeignKey(User, editable=False)
video = models.ForeignKey(Video, editable=False)
section = models.ForeignKey(Section, editable=False)
title = models.CharField(max_length=255)
description = models.TextField(null=True, blank=True)
的ModelForm:用jQuery的AJAX请求发送
class QuestionForm(ModelForm):
def __init__(self, video, *args, **kwargs):
super(QuestionForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['section'].queryset = Section.objects.filter(video=video)
class Meta:
model = Question
POST参数(视频参数由Javascript代码加):
section=6&title=test&description=test&video=1
而且最后,这里是我正在处理提交的视图:
def question_submit(request):
u = request.user
if u.is_authenticated():
q=QuestionForm(request.POST)
if q.is_valid():
logger.debug("YES!")
else:
logger.debug("NO!")
f=q.save(commit=False)
f.user=u
f.video_id=int(request.POST['video'])
f.save()
return HttpResponse("OK")
else:
return JsonResponse({'failed': 'You are not logged in. Try logging in in a new tab, then re-submit your question.'})
正如docs所建议的,我用commit = false保存,以便可以修改对象。
我有两个问题:
当它到达q.is_valid(),它引发错误 “ 'QuestionForm' 对象没有属性 'cleaned_data'”。
如果我取出q.is_valid()位,f.save()成功,但它会在数据库中插入一个空行。
对任何能够帮助的人来说,我欠你的理智。
啊是的。我将视频切换到位置,并忘记将其改回。当我在视图中调用它时,我正在做QuestionForm(v)而不是QuestionForm(video = v)。再次感谢pastylegs。 – bcoughlan 2011-06-01 23:19:54