2011-07-20 71 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}) 
相关问题