Size: a a a

Django [ru] #STAY HOME

2019 December 30

KT

Kassymkhan Torgayev in Django [ru] #STAY HOME
Александр Виноградов
это мне сложно. Нашёл простой путь через limit_choices_to, но надо получить id
через limit_choices_to не получится, он выставляется один раз и все. Можно callable поставить но без инстанса
источник

АВ

Александр Виноградов in Django [ru] #STAY HOME
Kassymkhan Torgayev
через limit_choices_to не получится, он выставляется один раз и все. Можно callable поставить но без инстанса
почему же? если руками поставить id 1 или 2, то работает, как надо
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
это мне сложно. Нашёл простой путь через limit_choices_to, но надо получить id
```
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
это мне сложно. Нашёл простой путь через limit_choices_to, но надо получить id
пример твоей формы
class CategoryForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
       super(CategoryForm, self).__init__(*args, **kwargs)

       if self.fields.get('service', None) is not None:
           self.fields['service'].queryset = self.fields['service']\
               .queryset.filter(service_id=self.instance.service_id)

   class Meta:
       model = Category
       fields = '__all__'
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
почему же? если руками поставить id 1 или 2, то работает, как надо
потому что туда фиг передашь твой self.service_id без костылей
источник

KT

Kassymkhan Torgayev in Django [ru] #STAY HOME
Александр Виноградов
почему же? если руками поставить id 1 или 2, то работает, как надо
Это нужно что бы ограничить значения полей при создании инстанса, то есть логично что при создании инстанса у тебя самого инстанса быть не может
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
Судя по логике лучше сделать лимитированные чоисы на уровне формы. Так что вариант выше вполне неплохой
источник

AG

Alexander Greckov in Django [ru] #STAY HOME
Как по мне, так будет правильней
источник

KT

Kassymkhan Torgayev in Django [ru] #STAY HOME
Kassymkhan Torgayev
Это нужно что бы ограничить значения полей при создании инстанса, то есть логично что при создании инстанса у тебя самого инстанса быть не может
Просто ограничь в любоом другом месте
источник

KT

Kassymkhan Torgayev in Django [ru] #STAY HOME
в формах например
источник

АВ

Александр Виноградов in Django [ru] #STAY HOME
Artem Gubatenko
пример твоей формы
class CategoryForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
       super(CategoryForm, self).__init__(*args, **kwargs)

       if self.fields.get('service', None) is not None:
           self.fields['service'].queryset = self.fields['service']\
               .queryset.filter(service_id=self.instance.service_id)

   class Meta:
       model = Category
       fields = '__all__'
в админке её как использовать?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
class CategoryAdmin(admin.ModelAdmin):
   ....
   form = CategoryForm
источник

АВ

Александр Виноградов in Django [ru] #STAY HOME
Artem Gubatenko
class CategoryAdmin(admin.ModelAdmin):
   ....
   form = CategoryForm
откуда он знает, что форму надо применить для конкретного поля?
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
это форма для всей админки этой модели

те настройки которые ты не указал в форме, возьмутся из твоего класса админки
источник

АВ

Александр Виноградов in Django [ru] #STAY HOME
просто пока не заработало
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
откуда он знает, что форму надо применить для конкретного поля?
в админке определено поле service
в форме оно попадет в self.fields
ты его меняешь в __init__
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
просто пока не заработало
ты же поправил мой код под себя? я мог ошибиться с названиями
источник

АВ

Александр Виноградов in Django [ru] #STAY HOME
Artem Gubatenko
ты же поправил мой код под себя? я мог ошибиться с названиями
поправил.
(Pdb) self.fields
{'name': <django.forms.fields.CharField object at 0x7f35f5083630>, 'description': <django.forms.fields.CharField object at 0x7f35f50833c8>, 'price': <django.forms.fields.IntegerField object at 0x7f35f50836a0>, 'explanation': <django.forms.fields.CharField object at 0x7f35f50839b0>, 'group': <django.forms.models.ModelChoiceField object at 0x7f35f50839e8>}
(Pdb)

тут нет поля сервис
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
судя по картинке у тебя это поле - group
источник

AG

Artem Gubatenko in Django [ru] #STAY HOME
Александр Виноградов
поправил.
(Pdb) self.fields
{'name': <django.forms.fields.CharField object at 0x7f35f5083630>, 'description': <django.forms.fields.CharField object at 0x7f35f50833c8>, 'price': <django.forms.fields.IntegerField object at 0x7f35f50836a0>, 'explanation': <django.forms.fields.CharField object at 0x7f35f50839b0>, 'group': <django.forms.models.ModelChoiceField object at 0x7f35f50839e8>}
(Pdb)

тут нет поля сервис
получается как-то так:
class CategoryForm(forms.ModelForm):
   def __init__(self, *args, **kwargs):
       super(CategoryForm, self).__init__(*args, **kwargs)

       if self.fields.get('group', None) is not None:
           self.fields['group'].queryset = self.fields['group']\
               .queryset.filter(service_id=self.instance.service_id)

   class Meta:
       model = Category
       fields = '__all__'
источник