如果这个对象的创建者是request user, Django会在admin中排除这个字段



如果这个对象的创建者是当前用户,我如何从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 []

最新更新