Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » Django
  • » Помогите с ModelChoiceField и фильтрацией отображения в форме [RSS Feed]

#1 Апрель 28, 2020 10:29:12

Sokov
Зарегистрирован: 2017-11-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ModelChoiceField и фильтрацией отображения в форме

Здравствуйте!
У меня есть классы в 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)

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

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

Прикреплённый файлы:
attachment 20200427_114715.jpg (524,4 KБ)

Офлайн

#2 Апрель 28, 2020 22:25:00

Romissevd
От: Счастье
Зарегистрирован: 2015-03-01
Сообщения: 533
Репутация: +  76  -
Профиль   Отправить e-mail  

Помогите с ModelChoiceField и фильтрацией отображения в форме

в 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
А при инициализации формы передай user_id
 forms = OrderBigPrintForm(request.user.id)

Офлайн

#3 Апрель 29, 2020 11:46:52

Sokov
Зарегистрирован: 2017-11-20
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ModelChoiceField и фильтрацией отображения в форме

Romissevd
в forms попробуй определить поле таким образом
до init нету self

вот нашел вариант
https://ru.stackoverflow.com/questions/594743/forms-modelchoicefield-%d0%9a%d0%b0%d0%ba-%d0%bf%d0%be%d0%bb%d1%83%d1%87%d0%b8%d1%82%d1%8c-%d1%81-%d0%bf%d0%be%d0%bc%d0%be%d1%89%d1%8c%d1%8e-queryset-name-model-objects-filt

но как передать в views.py form = KommpredForm(request.POST, user=user)
если у меня там form_class?

Офлайн

  • Начало
  • » Django
  • » Помогите с ModelChoiceField и фильтрацией отображения в форме[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version