使用创建对象的用户名自动填充字段?

时间:2015-08-28 20:08:57

标签: django django-admin

我有一个模型,Package

class Package(models.Model):
    VIP = models.BooleanField()
    name = models.CharField(max_length=200)
    contents = models.CharField(max_length=200)
    owner = # username that created this object

每当用户添加新的Package(通过管理员)时,我希望owner包含此用户的名称。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

如果要隐藏管理员中的所有者字段,请从模型管理员中排除所有者字段,然后使用save_model方法设置所有者。

class PackageAdmin(admin.ModelAdmin):
    exclude = ('owner',)

    def save_model(self, request, obj, form, change):
        if not change:
            # only set owner when object is first created
            obj.owner = request.user
        obj.save()

如果您想保留表单的所有者字段,请覆盖get_changeform_initial_data,并将所有者添加为初始值。

class PackageAdmin(admin.ModelAdmin):
    def get_changeform_initial_data(self, request):
        return {'owner': request.user}

上面的代码假定所有者是用户模型的外键,这是我推荐的方法。如果您确实要将用户名存储为字符串,则需要将上面的行更改为:

obj.owner = request.user.username

return {'owner': request.user.username}