2011-03-12 16 views
3

我知道這似乎是Django圈子中的一個問題,但我不敢說我​​還沒有找到解決方案這個。(Django)(外鍵問題)model.person_id可能不是NULL

我的模型 -

from djago.... import User 
class InfoPersonal(models.Model): 
... 
person = models.OneToOneField(User) 

我試圖重寫save_model()的管理員定義,以及重寫保存()的形式,但似乎沒有任何工作。

如果您要將數據自動添加到模型的ForeignKey或OneToOneField列中,您將如何執行此操作?

def profile_creation_personal(request): 
    if request.method == 'POST': # If the form has been submitted... 
     form = PersonalForm(request.POST) # A form bound to the POST data 
     # form.person = request.user 
     if form.is_valid(): # All validation rules pass 
      # Process the data in form.cleaned_data 
      # ... 
      form.save() 
      return HttpResponseRedirect('/done') # Redirect after POST 
    else: 
      form = PersonalForm() # An unbound form 
    return render_to_response('info/personal/profile_create.html', { 'form': form,}) 


class PersonalForm(ModelForm): 
    #hometown_id = ModelChoiceField(queryset=InfoReferenceCities.objects.all(),empty_label=None) 
    def save(self, *args, **kwargs): 
     self.person = request.user 
     super(PersonalForm, self).save(*args, **kwargs) 
    class Meta: 
     model = InfoPersonal 
     exclude = ('person',) 
     widgets = {'dateofbirth' : SelectDateWidget()} 
+0

[如何將數據自動添加到ForeignKey或OneToOneField列到模型(DJANGO)]的可能重複(http://stackoverflow.com/questions/5281744/how-to-auto-add-data -into-foreignkey-or-onetoonefield-column-to-a-model-django) – 2011-03-12 10:30:16

+0

耐心可以殺死一個男人,你知道嗎? – Sussagittikasusa 2011-03-12 10:35:58

+0

如果你編程最重要的事情,你需要學習的是耐心:) – Ski 2011-03-12 11:00:14

回答

1

我得到了答案!我感覺很好!

personal = form.save(commit = False) 
personal.person = request.user 
personal.save() 

這和Ignacio所說的很像,只有commit = False纔是保存實例而不拋出異常的關鍵語句。感謝所有幫助過的人!
Cheers

+0

特別感謝伊格納西奧我的朋友,他一直在我身邊,而我尋找聖盃。多謝兄弟!!! – Sussagittikasusa 2011-03-12 11:01:48

0

在你PersonalForm,你也可以繼承你的保存()函數,因此在添加適當的數據,這樣的事情:

class PersonalForm(ModelForm): 
    def save(self, *args, **kwargs): 
     self.person = request.user 
     super(PersonalForm, self).save(*args, **kwargs) 

    class Meta: 
     model = Personal 
+0

除了你不能從這裏到達那裏。 (提問者否認這個問題的答案是重複的) – 2011-03-12 10:43:51

+0

Hey Bjorn非常感謝你的回覆,我認爲這可能只有'request'被稱爲未定義的變量。我該怎麼做? – Sussagittikasusa 2011-03-12 10:48:09

+0

@Ignacio - 嘿,我已經嘗試過form.person = request.user man,它沒有工作...... – Sussagittikasusa 2011-03-12 10:48:57

0

看到這個

parent = models.ForeignKey('self', blank=True, null=True, verbose_name=_("parent")) 

這個確定,但有問題的SQLite,將其更改爲postgresql其確定。 (它爲我的代碼,將其更改爲您的狀態)

+0

嘿謝謝回覆Efazati,但現在我可以只使用sqlite的人,我認爲比約恩的上面可能會起作用,只能弄清楚一件事。 – Sussagittikasusa 2011-03-12 10:54:42

+0

歡迎您; – Efazati 2011-03-12 10:55:54