2009-01-05 32 views
12

我有一個模型問題域名爲userid,在提出問題之前,我需要登錄,我希望保存時捕獲當前登錄用戶的用戶ID並將其分配給用戶的用戶ID問題模型。我如何自動填充django中的字段?

請注意,我沒有在我的表單上顯示用戶標識,即在問題模型中,我聲明瞭用戶標識如下;

類問題(models.Model): ... 的userid = models.ForeignKey(用戶,可編輯= FALSE) ...

我如何分配登錄的用戶ID的問題模型userid

+0

作爲一個旁註,它會更明智和清晰稱爲您的字段「用戶」,而不是「userid」;因爲該屬性實際上是指用戶對象,而不是id號。 Django將自動創建帶有'_id'的數據庫字段;所以你現在已經是「userid_id」了。 – 2009-01-05 17:13:16

回答

11

您的代碼可能是這樣的:

from django.contrib.auth.decorators import login_required 

class QuestionForm(forms.ModelForm): 
    class Meta: 
     model = Question 

@login_required 
def ask(request): 
    form = QuestionForm(request.POST) 

    if form.is_valid(): 
     question = form.save(False) 
     question.userid = request.user 
     question.save() 

    #... 
+1

謝謝!即將發佈類似的問題,但這解決了它 – f4nt 2009-04-03 21:08:09

0

有一點要記住的是事實,你不能從你的模型訪問請求對象(因此當前用戶)沒有黑客左右Django的設計約束。

因此像自動填充字段created_by和updated_by這樣的整潔技巧在Django中不起作用。您必須在視圖中手動設置這些字段,如@Daevaorn所示。

2

This blog入門(由詹姆斯貝內特)可能會證明對你有用......它奠定了一種方法來做幾乎完全符合你的要求。

0

對於一個更新的,可能會更新的資源,我推薦官方的Django文檔。這非常例子取得了它的方式進入管理文檔的方法的ModelAdmin部分: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods

如果你像我一樣,你會被誘惑,只是搶例子並運行,但你可能從放緩中受益,花幾分鐘時間閱讀,然後執行 - 我當然會有...

請注意,我指向1.6,但在頁面的右下角是一個動態選擇器,讓你選擇你的版本。 (這些令人敬畏的文檔是什麼推動我從Rails的Django!)