Django: Как получить поля модели пользователя вместо списка выбора в форме сотрудника? - PullRequest
0 голосов
/ 14 февраля 2019

Я работаю над приложением и застрял в самом начале.Пожалуйста, помогите мне здесь.

models.py

class Employee(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null=False)
    designation = models.ForeignKey(Designation, on_delete=models.CASCADE, null=False)

Пользователь из django.contrib.auth.models

views.py

class EmployeeCreateView(LoginRequiredMixin, generic.CreateView):
    model = Employee
    fields = '__all__'
    success_url = reverse_lazy('core:view-employees')

def form_valid(self, form):
    """If the form is valid, save the associated model."""
    self.object = form.save(commit=False)
    self.object.company = self.request.user.company
    self.object.save()
    form.save_m2m()
    return super().form_valid(form)

employee_form.html

<form action="{% url 'core:add-employees' %}" method="post">
    {% csrf_token %}
    {{ form.as_p }}
    <input type="submit" value="Submit" class="bnt btn-small">
</form>

визуализированная HTML-форма enter image description here

Вот проблема.

Вместо User, являющегося списком выбора ,Я хочу поля модели пользователя, то есть username, email, password и т. Д., В то время как Designation должно оставаться в качестве списка выбора .

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 14 февраля 2019

Есть много способов для этого.Если вы используете только поле designation как дополнительное поле для пользователя.простое добавление designation к модели User будет работать легко.Для этого вы можете использовать наследование нескольких таблиц следующим образом.

class Employee(User): # change Here
    # Remove -> user = models.OneToOneField(User, on_delete=models.CASCADE, null=False)
    designation = models.ForeignKey(Designation, on_delete=models.CASCADE, null=False)

Теперь вы получите то, что хотели.но обратите внимание, что это не лучший вариант использования для многих ситуаций, поскольку он создает левое внешнее соединение в таблице БД.но для этой ситуации я не думаю, что это повлияет на что-либо.

Чтобы узнать больше о наследовании многотабличных таблиц Django, см. https://docs.djangoproject.com/en/2.1/topics/db/models/#multi-table-inheritance

, чтобы узнать о других способах расширения пользовательской модели, см .:https://simpleisbetterthancomplex.com/tutorial/2016/07/22/how-to-extend-django-user-model.html

0 голосов
/ 14 февраля 2019

Вы можете использовать ModelChoiceField для пользовательского поля в вашей форме.Создание класса формы сделало бы это намного проще.

См. https://docs.djangoproject.com/en/dev/ref/forms/fields/#modelchoicefield для справки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...