我有一個模型問題域名爲userid,在提出問題之前,我需要登錄,我希望保存時捕獲當前登錄用戶的用戶ID並將其分配給用戶的用戶ID問題模型。我如何自動填充django中的字段?
請注意,我沒有在我的表單上顯示用戶標識,即在問題模型中,我聲明瞭用戶標識如下;
類問題(models.Model): ... 的userid = models.ForeignKey(用戶,可編輯= FALSE) ...
我如何分配登錄的用戶ID的問題模型userid?
我有一個模型問題域名爲userid,在提出問題之前,我需要登錄,我希望保存時捕獲當前登錄用戶的用戶ID並將其分配給用戶的用戶ID問題模型。我如何自動填充django中的字段?
請注意,我沒有在我的表單上顯示用戶標識,即在問題模型中,我聲明瞭用戶標識如下;
類問題(models.Model): ... 的userid = models.ForeignKey(用戶,可編輯= FALSE) ...
我如何分配登錄的用戶ID的問題模型userid?
您的代碼可能是這樣的:
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()
#...
謝謝!即將發佈類似的問題,但這解決了它 – f4nt 2009-04-03 21:08:09
有一點要記住的是事實,你不能從你的模型訪問請求對象(因此當前用戶)沒有黑客左右Django的設計約束。
因此像自動填充字段created_by和updated_by這樣的整潔技巧在Django中不起作用。您必須在視圖中手動設置這些字段,如@Daevaorn所示。
This blog入門(由詹姆斯貝內特)可能會證明對你有用......它奠定了一種方法來做幾乎完全符合你的要求。
對於一個更新的,可能會更新的資源,我推薦官方的Django文檔。這非常例子取得了它的方式進入管理文檔的方法的ModelAdmin部分: https://docs.djangoproject.com/en/1.6/ref/contrib/admin/#modeladmin-methods
如果你像我一樣,你會被誘惑,只是搶例子並運行,但你可能從放緩中受益,花幾分鐘時間閱讀,然後執行 - 我當然會有...
請注意,我指向1.6,但在頁面的右下角是一個動態選擇器,讓你選擇你的版本。 (這些令人敬畏的文檔是什麼推動我從Rails的Django!)
作爲一個旁註,它會更明智和清晰稱爲您的字段「用戶」,而不是「userid」;因爲該屬性實際上是指用戶對象,而不是id號。 Django將自動創建帶有'_id'的數據庫字段;所以你現在已經是「userid_id」了。 – 2009-01-05 17:13:16