2011-07-20 98 views
3

我有模型消息,它是表單管理器。要填充「用戶」和「組」字段,我需要知道當前記錄的用戶標識,但我不知道如何在保存前獲取它。如何在Django管理面板中獲取當前記錄的用戶ID?

class Message(models.Model): 
    title = models.CharField(max_length = 100) 
    text = models.TextField() 
    date = models.DateTimeField(auto_now_add=True) 
    user = models.ForeignKey(User, null = True, blank = True) 
    main_category = models.ForeignKey(MainCategory) 
    sub_category = models.ForeignKey(SubCategory) 
    groups = models.ManyToManyField(Group) 

class MessageAdminForm(forms.ModelForm): 
    def __init__(self, *arg, **kwargs): 
     super(MessageAdminForm, self).__init__(*arg, **kwargs) 
     self.initial['main_category'] = MainCategory.objects.get(title = 'News') 

回答

7

不要在表單中這樣做。覆蓋管理子類上的save_model方法 - 它可以訪問請求。

class MessageAdmin(admin.ModelAdmin): 

    def save_model(self, request, obj, form, change): 
     obj.user = request.user 
     super(MessageAdmin, self).save(request, obj, form, change) 
+1

錯誤---「超級」對象有沒有屬性「保存」 要解決使用--- 超(MessageAdmin,個體經營).save_model (請求,obj,表單,更改) – GrvTyagi

0

編輯:丹尼爾的方式更好。

在你看來:

user = request.user 
if user.is_authenticated(): 
    user_id=user.pk # pk means primary key 

但你通常不會與ID處理。將用戶字段設置爲對象,而不是標識。下面是什麼我目前工作的一個片段:

def question_submit(request): 
    u = request.user 
    if u.is_authenticated(): 
     if q.is_valid(): 
      f=q.save(commit=False) 
      f.user=u 
      f.save() 

      return JsonResponse({'success': True}) 
相關問題