2015-07-12 57 views
1

我有一个领域的典范:Django管理模式字段设置为当前用户

class MyModel(models.Model): 
    name = models.CharField(max_length=50) 
    created_by = models.ForeignKeyField(User) 

在我的管理:

class MyModelAdmin(admin.ModelAdmin): 
    list_display= ("name",) 
    fields = ("name",) 

在这里我不想created_by的管理,同时增加为MyModel。我希望它被设置为当前用户,如created_by = request.user

我该怎么做?

谢谢

+0

的可能重复[如何自动插入创造Django管理对象时,当前的用户?](http://stackoverflow.com/questions/2991365/how-to-auto-insert-the-current -user-when-creating-an-object-in-django-admin) – jgadelange

回答

5

您已经设置fields使created_by没有出现在形式Django管理。

现在您需要覆盖save_model,并在保存新对象之前设置用户。

class MyModelAdmin(admin.ModelAdmin): 
    fields = ("name",) 

    def save_model(self, request, obj, form, change): 
     if not change: 
      # the object is being created, so set the user 
      obj.created_by = request.user 
     obj.save() 
+0

没有为我工作......保持这两个字段,并尝试在字段中看到request.user。它不会出现 – gamer

+0

我不应该返回任何东西吗?模型保存后? – gamer

+0

谢谢..我不得不将模型字段设置为空并空白为真 – gamer

0

为了做到这一点重写save_model方法和created_by字段设置为当前用户。

class MyModelAdmin(admin.ModelAdmin): 
    list_display= ("name",) 
    fields = ("name",) 

    def save_model(self, request, obj, form, change):    
     if not change: 
     # can use this condition also to set 'created_by'  
     # if not getattr(obj, 'created_by', None):    
      obj.created_by = request.user 
     obj.save() 
+0

我没有看到我的表单中的用户。当我尝试保存没有created_by它给出错误,这是该字段是必需的 – gamer

+0

@Alasdair更新它来检查'obj'是否具有'created_by'属性集。 –

+0

@gamer尝试将'null = True'和'blank = True'添加到'created_by'。 –

相关问题