2010-06-07 64 views
18

我的文章,數據庫與如何在django admin中創建對象時自動插入當前用戶?

submitter = models.ForeignKey(User, editable=False) 

User導入如下:

from django.contrib.auth.models import User. 

我想自動插入當前活動的用戶在提交場當一個特定的用戶提交文章。

任何人有任何建議嗎?

+0

你的意思是在使用

models.py

from django.contrib.auth.models import User class Car(models.Model): created_by = models.ForeignKey(User,editable=False,null=True,blank=True) car_name = models.CharField(max_length=40) 

admin.py管理員或前端? – 2010-06-07 17:25:19

+0

我想在django管理網站中使用 – FurtiveFelon 2010-06-07 19:47:34

回答

30

萬一有人正在尋找一個答案,這裏是我在這裏找到了解決辦法: http://demongin.org/blog/806/

總結: 他的雜文表如下:

from django.contrib.auth.models import User 

class Essay(models.Model): 
    title = models.CharField(max_length=666) 
    body = models.TextField() 
    author = models.ForeignKey(User, null=True, blank=True) 

哪裏多用戶可以創建散文,所以他創建了admin.ModelAdmin類如下:

from myapplication.essay.models import Essay 
from django.contrib import admin 

class EssayAdmin(admin.ModelAdmin): 
    list_display = ('title', 'author') 
    fieldsets = [ 
     (None, { 'fields': [('title','body')] }), 
    ] 

    def save_model(self, request, obj, form, change): 
     if getattr(obj, 'author', None) is None: 
      obj.author = request.user 
     obj.save() 
+0

只有在作者爲null = True的情況下才能使用。沒有它,我會從「getattr」行中「引發self.field.rel.to.DoesNotExist」。我可以要求null = False嗎? – dfrankow 2012-05-27 17:49:23

+0

@dfrankow,我不確定你是否想通了,但如果你刪除'if getattr'行,你可以用'null = False'列來完成。 – Andy 2012-08-08 20:00:31

+0

它對我來說非常合適..感謝很多.. – 2013-04-29 11:06:58

0

http://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.prepopulated_fields你不能用prepopulated_field管理指令中使用ForeignKey的,唉

this thread可以幫助你。在我的回答中,我還鏈接到Pro Django的Google掃描版本,它有很好的解決方案。理想情況下,如果你可以購買這本書,那肯定會更好,但Google似乎仍然有大部分相關章節。

+1

我無法真正看到相關頁面... – FurtiveFelon 2010-06-07 18:40:30

2

如果你不想要保持外鍵在您模型的用戶,然後在admin.py覆蓋Save方法

obj.author = request.user.username 
obj.save() 

這將存儲是誰在你的數據庫登錄的用戶名。

0

假設用戶B保存了由用戶A創建的記錄。通過使用上述方法,記錄將與用戶B一起保存。在某些情況下,這可能不是最佳選擇,因爲保存該記錄的每個用戶都將「偷」它。有一個變通方法這一點,這將節省用戶只有一次(誰創造它的人):

from . models import * 

class CarAdmin(admin.ModelAdmin): 
    list_display = ('car_name','created_by') 
    actions = None 

    def save_model(self, request, obj, form, change): 
     if not obj.created_by: 
      obj.created_by = request.user 
     obj.save() 
相關問題