我對今天發佈的所有問題表示歉意,但我對這個問題感到心有餘而力不足。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