#python #django
#python #django
Вопрос:
например, у меня есть модель с booleanfield
class Item(BaseModel):
name = models.CharField(max_length=255)
pending = models.BooleanField(default=False)
если пользователь создает новый элемент из панели администратора, ожидающее поле имеет значение false, и этот элемент не будет отображаться на веб-сайте, пока другой пользователь не установит для этого поля значение True, но этому пользователю не должно быть разрешено вносить изменения в ожидающее поле для своих элементов, но он может выполнять это действие для элементов других пользователей. какие-либо решения?
Комментарии:
1. пожалуйста, исправьте отступ
Ответ №1:
Существует несколько способов реализовать это, в зависимости от того, как вы в конечном итоге собираетесь его использовать. Самый простой — добавить пользователю foreignkey в свой элемент (при условии, что вы используете django auth).
from django.contrib.auth.models import User
class Item(BaseModels):
created_by = models.ForeignKey(User)
name = models.CharField(max_length=255)
pending = models.BooleanField(default=False)
предполагая, что это доступно только через представления, тогда вы можете просто сделать:
def some_view(request):
if item_being_edited.created_by = request.user and not item_being_edited.pending:
#rejection goes here
#do stuff
в качестве примечания измените ожидающее поле. Либо ожидание = True означает, что элемент находится на рассмотрении, либо он должен быть одобрен = False. Позже будет проще, если имеет смысл прочитать это в вашей голове без гимнастики.
Комментарии:
1. есть ли какие-либо возможные способы, с помощью которых пользователю, создавшему этот элемент, не будет разрешено изменять значение этого поля с панели администратора?
2. Не то, о чем я знаю. Если вам нужна защита от пользователей-администраторов, вам, вероятно, понадобится новая модель авторизации
3. я не думаю, что есть необходимость в новой модели авторизации. мне нужно, чтобы это одно поле в панели администратора это логическое поле (ожидающее) должно быть изменяемым для других пользователей не по запросу.пользователь, создавший этот объект
4. @I.Jokhadze функциональность django.contrib.auth не поддерживает этот уровень управления разрешениями на уровне строк. Плагин django-authority.readthedocs.io/en/latest утверждает, что делает это, но я не рассматривал его в деталях.
5. Прошу помощи. Я попробую это