如果这个对象的创建者是当前用户,我如何从Django管理中排除一个字段?有没有办法在admin.py
中定制我的模型?
class Toys(BaseModel):
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, related_name='Item_tags')
price = models.CharField(max_length=255)
status = models.BooleanField(default=False)
首先,您需要向您的模型添加一个字段来存储创建者。
class Toys(BaseModel):
creator = models.ForeignKey(User, on_delete=models.CASCADE)
name = models.CharField(max_length=255)
tags = models.ManyToManyField(Tag, related_name='Item_tags')
price = models.CharField(max_length=255)
status = models.BooleanField(default=False)
覆盖你的模型管理员的get_fields
方法。
class ToyAdmin(admin.ModelAdmin):
def get_fields(self, request, obj=None):
fields = super(ToyAdmin, self).get_fields(request, obj)
if obj is not None and request.user.is_authenticated(): # In Django 1.10+ use request.user.is_authenticated
if obj.creator == request.user:
fields = [f for f in fields if f != 'status']
return fields
在Django 1.11+中,你可以使用get_exclude
。
class ToyAdmin(admin.ModelAdmin):
def get_exclude(self, request, obj=None):
if obj is not None and request.user.is_authenticated(): # In Django 1.10+ use request.user.is_authenticated
if obj.creator == request.user:
return ['status']
else:
return []