Отдельные поля для пользователей и администраторов в Django models.py - PullRequest
0 голосов
/ 08 апреля 2020

У меня есть BooleanField в моем файле models.py.

Я хочу, чтобы он был True для всех администраторов / суперпользователей по умолчанию, а я хочу, чтобы он был False для всех остальных пользователей по умолчанию.

Я не хочу использовать теги шаблона if-else в моем html для этой цели, и я надеюсь получить более чистое решение.

Что-то вроде:

field_name = models.BooleanField(
if author.is_superuser:
    default = True
else:
    default=False
)

Любая помощь приветствуется. Здесь автор является автором 'Post', который является классом модели.

Редактировать 1: Мне нужен user.is_superuser, фактически пользователь пользователя. Мне нужно проверить, является ли автор сообщения в блоге суперпользователем или нет, а затем назначить значение по умолчанию для логического поля.

1 Ответ

0 голосов
/ 08 апреля 2020

У вас нет понятия "текущий пользователь" в определении модели. Но у вас есть доступ к текущему пользователю в ваших представлениях (как request.user), так что вы можете использовать его там для передачи правильного начального значения для вашего поля

в качестве примера (используя представление на основе функций):

def myview(request, ....):
    if request.method == "POST":
        # ...
    else:
        form = YourModelForm(initial={"field_name": request.user.is_superuser})

РЕДАКТИРОВАТЬ

Мне не нужен пользователь, но пользователь автора

Что я могу сказать ? Если вы хотите получить лучшие ответы, пишите лучшие вопросы - вы не включили в свой вопрос никакой контекст, даже соответствующие части вашей модели.

Это существо При этом значения по умолчанию для полей модели используются только в двух случаях: при создании нового экземпляра и при добавлении новых полей в существующую модель.

В первом случае ваш Article или любой другой экземпляр модели еще не существует, поэтому у него еще не может быть "автора". IOW «автор» - это либо пользователь запроса (наиболее распространенный случай и, вероятно, ваш), либо другой пользователь, которого вы явно предоставили. В обоих случаях у вас есть правильный пользовательский экземпляр под рукой, и мой ответ выше применим (либо как есть, либо с некоторой адаптацией, которую вы должны сделать самостоятельно).

Во втором случае, это просто то, с чем вы сталкиваетесь при переносе данных.

...