2011-06-01 48 views
0

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

我有兩個問題:

  1. 當它到達q.is_valid(),它引發錯誤 「 'QuestionForm' 對象沒有屬性 'cleaned_data'」。

  2. 如果我取出q.is_valid()位,f.save()成功,但它會在數據庫中插入一個空行。

對任何能夠幫助的人來說,我欠你的理智。

回答

2

您還沒有傳遞視頻視圖:

forms.py

def __init__(self, video, *args, **kwargs): 

views.py

q=QuestionForm(request.POST) 

視頻是一個位置參數,我會想象它是解釋request.POST作爲視頻?

你可以改變視頻到關鍵字參數:

def __init__(self, video=None, *args, **kwargs): 
    if video: 
     ... 

爲mordi metions,你應該檢查是否有),這是一個有效的POST,和b)這是一個Ajax請求

def question_submit(request): 
    if request.method == "POST" and request.is_ajax(): 
     ... 
+0

啊是的。我將視頻切換到位置,並忘記將其改回。當我在視圖中調用它時,我正在做QuestionForm(v)而不是QuestionForm(video = v)。再次感謝pastylegs。 – bcoughlan 2011-06-01 23:19:54

0

它看起來像你的request.POST是空的。你確定數據是通過POST方法發送的嗎?檢查

if request.method == 'POST: 

或使用

q=QuestionForm(request.REQUEST) 

獲得POST/GET數據。

相關問題