Поле исключения Django в admin, если создателем этого объекта является пользователь запроса

#python #django #django-admin

#python #django #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)
  

Комментарии:

1. На ваш вопрос было бы легче ответить, если бы вы показали свою модель и администратора модели и сказали, какое поле вы хотите исключить.

2. отредактированный мой вопрос и поле — это статус, который я хочу исключить

3. Вы не сохраняете создателя в модели, поэтому вы не можете определить, является ли пользователь создателем или нет.

4. я добавлю новое поле, это не проблема. мне нужно знать, как настроить это в моем admin.py

Ответ №1:

Во-первых, вам нужно добавить поле в вашу модель для хранения создателя.

 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 []
  

Комментарии:

1. и один вопрос, как я могу сделать так, чтобы пользователь, создающий объект, не мог видеть ожидание. (я пытался исключить, но другие пользователи не смогут увидеть это поле) какие-либо предложения?

2. Это звучит как отдельная проблема. Пожалуйста, задайте новый вопрос.