Как использовать ModelChoiceField? - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть несколько моделей классов. И некоторые классы имеют ограничивающие поля с другим классом. У каждого класса есть поле - автор. Мне бы хотелось, чтобы для каждого пользователя в поле формы отображались только те данные, которые были созданы этими авторами.

Например:

класс "TypeJob" имеет поле "author".

Пользователь Jhon создал TypJob - «Живопись».

Пользователь Alex создал TypJob - «Очистка».

Класс «Порядок» имеет ограничивающее поле - «name_typ_job»

Когда Джон хочет создать заказ, он открывает форму и щелкает поле «имя типа работы», он видит оба типа работы: живопись и уборка.

Мне бы хотелось, чтобы он видел и мог выбрать только «живопись» ». Потому что он автор.

Django 3 models.py

from django.db import models
from django.contrib.auth.models import User
from phonenumber_field.modelfields import PhoneNumberField
import requests

class TypJob(models.Model):
    '''ТИп работ широкоформатная печать, цифровая и прочие'''
    author = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name='Автор тип работы', null=True)
    name_job = models.CharField('название', max_length=200)

    class Customer(models.Model):
        '''Клиент и данные клиента'''
        author = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name='Автор клиента', null=True)
        name = models.CharField('название', max_length=200)
        name_full = models.CharField('Ф.И.О.', max_length=250)
        tel_number = PhoneNumberField(verbose_name ='номер телефона', blank=True, null=True)
        email = models.EmailField('почта', max_length=100, blank=True, null=True)

    class Order(models.Model):
        author = models.ForeignKey(User, on_delete = models.CASCADE, verbose_name='Автор заказа', blank=True, null=True)
        number_order = models.CharField('номер заказа', max_length=100)
        date_create = models.DateTimeField(auto_now=True)
        name = models.ForeignKey(Customer, on_delete = models.CASCADE, verbose_name='Заказчик', null=True)
        name_order = models.CharField('название', max_length=200)
        name_job = models.ForeignKey(TypJob, on_delete = models.CASCADE, verbose_name='тип работ', null=True)

views.py

class OrderCreateView(LoginRequiredMixin, CustomSuccessMessageMixin, CreateView):
    model = Order
    template_name = 'orders.html'
    form_class = OrdertForm
    success_url = reverse_lazy('orders')

forms.py

class OrderForm(forms.ModelForm):
    class Meta:
        model = Order
        fields = (
            'name_order',
            'name_job',
        )
...