Форум сайта python.su
Здравствуйте!
У меня есть классы в models, которые связаны друг с другом полем “автор”. Я хотел бы чтобы в форме пользователь видел только те варианты, автором которых является сам автор как текущий авторизованный пользователь.
Например:
Класс “TypeJob” имеет поле “author”.
Пользователь Иван создал TypJob - “Покраска”.
Пользователь Коля создал TypJob - “Чистка”.
Класс “Order” имеет связанное поле “name_typ_job” с классом “TypJob”.
Когда Иван открывает форму для создания заказа “Order”, то в поле Typ job есть оба типа работ: и покраска и чистка.
Я хотел бы чтобы для авторизованного пользователя в этой форме был виден только вариант, автором которого является сам пользователь.
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)
class OrderCreateView(LoginRequiredMixin, CustomSuccessMessageMixin, CreateView): model = Order template_name = 'orders.html' form_class = OrderBigPrintForm success_url = reverse_lazy('orders')
class OrderBigPrintForm(forms.ModelForm): class Meta: model = Order fields = ( 'name_order', 'name_job', )
Прикреплённый файлы:
20200427_114715.jpg (524,4 KБ)
Офлайн
в forms попробуй определить поле таким образом
class OrderBigPrintForm(forms.ModelForm): name_job = forms.ModelChoiceField(queryset=TypJob.objects.filter(user__id=self.user)) def __init__(self, user, *args, **kwargs): super(OrderBigPrintForm, self).__init__(*args, **kwargs) self.user = user_id
forms = OrderBigPrintForm(request.user.id)
Офлайн
Romissevdдо init нету self
в forms попробуй определить поле таким образом
Офлайн