我有一个模型,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
包含此用户的名称。我怎么能这样做?
答案 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}