2012-10-14 80 views
0

我有問題,有關如何附加到Django中登錄用戶的形式。 我希望附加表單屬於登錄用戶,並且我在表單中輸入的數據應該在登錄用戶表下進行。我是Django和python的新手,請耐心等待,希望我能正確解釋我想要做的事情。django登錄用戶配置文件和相關的其他形式

我要爲這個視圖輸入的數據應該記錄在用戶只有基本上我想附加這個視圖到登錄的用戶只有我得到的錯誤是 異常值:

registration_todos.user_id不能爲null

#models 

class userProfile(models.Model): 
    user = models.OneToOneField(User) 
    birth =models.DateField() 
    name = models.CharField(max_length=100) 
    def __unicode__(self): 
     return self.name 



class todos(models.Model): 
    user  = models.ForeignKey(User) 
    title = models.CharField(max_length=100) 
    created = models.DateField() 
    time  = models.TimeField() 
    def __unicode__(self): 
      return unicode(self.user) 

#forms additional form for todos 
    class formtodos(ModelForm): 
     title  = forms.CharField(label=(u'Todo')) 
     created  = forms.DateField(label=(u'Date')) 
     time  = forms.TimeField(label=(u'Time')) 
     #user  = forms.CharField(label=(u'username')) 
      class Meta: 
       model = todos 
       exclude=('user',) 
#view 
def modeltodo(request): 
if request.user.is_authenticated(): 
    todos.objects.filter(user=request.user) 
if request.method == 'POST': 
    form =formtodos(request.POST) 
    if form.is_valid():# All validation rules pass 
     todoss = form.save(commit=False) 
     todoss.created_by = request.user 
     form.save() 
     return HttpResponseRedirect('/profile/') 
else: 
    form = formtodos() # An unbound form 

context = {'form':form} 
return render_to_response('todo.html', context, context_instance=RequestContext(request)) 

回答

1

你已經在你的形式指定exclude = ('user',)。這意味着當您嘗試保存表單時,不存在導致該錯誤的user_id。你可能想在save()之前撥打這個電話:todoss.user = request.user

+0

非常感謝你讓我非常沮喪,而我錯過了這個:)你能否提供一些文件鏈接,我可以很容易理解這個概念:) – Shazib

+0

你需要的一切應該在django文檔中:https://docs.djangoproject.com/en/dev/topics/forms/modelforms/基本上,表單中的字段將1-1映射到模型的屬性。當你爲todoss對象創建一個表單時(順便說一句,你應該使用標準的命名約定並將其改爲Todo),你排除'user'字段(顯然你希望它是'request.user',並且不希望用戶能夠改變這一點)。但是,當你運行form.save()時,表單中缺少導致錯誤的用戶數據。提供這個可以避免錯誤。 – scytale

相關問題