#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. Это звучит как отдельная проблема. Пожалуйста, задайте новый вопрос.