Фильтрация полей с пользовательской моделью - Django - PullRequest
0 голосов
/ 26 апреля 2020

Очень плохо знаком с Django.

Я создал пользовательскую модель, как показано ниже. Я также создал страницу для пользователей, чтобы обновить свои данные. Я хочу, чтобы две группы пользователей использовали одну и ту же страницу "account. html" для обновления своих данных. Но если пользователь является «Сотрудником», я хочу отобразить дополнительные поля.

Проще говоря, я пытаюсь добиться следующего логика c: Если группа пользователей = 'Клиент', тогда отображаются поля A & B для обновления Если группа пользователей = «Сотрудник», тогда отображаются поля A, B, C & D update

Любая помощь, высоко ценимая

Models.py

group_types = [('Client', 'Client'), ('Employee','Employee')]

class Account(AbstractBaseUser):
    email = models.EmailField(verbose_name="email", max_length=60, unique=True)
    username = models.CharField(max_length=30, unique=True)
    date_joined = models.DateTimeField(verbose_name='date joined', auto_now_add=True)
    last_login = models.DateTimeField(verbose_name='last login', auto_now=True)
    is_admin = models.BooleanField(default=False)
    is_active = models.BooleanField(default=True)
    is_staff = models.BooleanField(default=False)
    is_superuser = models.BooleanField(default=False)
    groups = models.CharField(choices=group_types, default="client", max_length=60)
    company_name = models.CharField(verbose_name='company name', max_length=30)

аккаунт. html

<form class="form-signin" method="post">{% csrf_token %}
  <h1 class="h3 mb-3 font-weight-normal">Account Details</h1>
  <p> Email Address </p>
  <input type="email" name="email" id="inputEmail" class="form-control" placeholder="Email address" required autofocus value={{account_form.initial.email}}>
  <br>
  <p> Username </p>
  <input type="text" name="username" id="inputUsername" class="form-control" placeholder="Username" required autofocus value={{account_form.initial.username}}>
  <br>
  <p> Company Name </p>
  <input type="text" name="company_name" id="inputCompany_Name" class="form-control" placeholder="Company Name" required autofocus value={{account_form.initial.company_name}}>

1 Ответ

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

Вы можете использовать modelform_factory для динамического создания формы, вы можете передавать различные поля в зависимости от пользователя

FIELDS = {
    'Client': ['a', 'b', 'c'],
    'Employee': ['a', 'b', 'c', 'd', 'e']
}

def view(request):
    form_class = modelform_factory(Account, fields=FIELDS.get(request.user.groups))
    form = form_class(instance=request.user)
    ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...