фильтрация полей inlineformset_factory - PullRequest
0 голосов
/ 26 декабря 2011

У меня есть следующие модели:

class TourItem(models.Model):
   Tour=models.ForeignKey(Tour)
   TourItemType=models.ForeignKey(TourItemType)
   Transfer=models.ForeignKey(Transfer)
   Accommodate=models.ForeignKey(Accommodate)
   Visit=models.ForeignKey(Visit)

и:

class Tour(models.Model):
   Lang_Choices=(
      ('fa',ugettext_lazy('Persian')),
      ('en',ugettext_lazy('English')),
      ('fr',ugettext_lazy('French')),
   )
   Lang=models.CharField(max_length=1,choices=Lang_Choices,editable=False)
   Name=models.CharField(max_length=100)
   Description=models.TextField()
   ActionDate=models.DateTimeField(auto_now=True,editable=False)

, и этот inlineformset:

TourItemFormSet=inlineformset_factory(Tour,TourItem,can_delete=True,extra=4)

Приспособьте, TourItemType, Модели передачи и посещения имеютВ поле с именем Lang, когда я делаю набор форм, у меня есть 4 комбинированных списка для этих моделей в каждой форме, теперь я хочу отфильтровать эти комбинированные списки с помощью request.LANGUAGE_CODE. Я много искал и получил следующий код:

def get_field_qs(field, **kwargs):
      if field.name == 'TourItemType':
     field.queryset = TourItemType.objects.filter(Lang__iexact=request.LANGUAGE_CODE)
      return field
   TourItemFormSet=inlineformset_factory(Tour,TourItem,formfield_callback=get_field_qs,can_delete=True,extra=4)

но теперь в нем нет поля, как я могу справиться с этим?

заранее спасибо

1 Ответ

2 голосов
/ 26 декабря 2011

Попробуйте это из вашего представления :

TourItemFormSet = inlineformset_factory(Tour,TourItem,can_delete=True,extra=4)
TourItemFormSet.form.base_fields["TourItemType"].queryset = TourItemType.objects.filter(Lang__iexact=request.LANGUAGE_CODE)
# then create an instance of TourItemFormSet and add to template context
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...