показывает заполненный выпадающий список в форме модели, который фильтруется ПК - PullRequest
0 голосов
/ 19 ноября 2011

У меня есть эти модели:

class LocationType(models.Model):
   Name=models.CharField(max_length=50)
   Description=models.CharField(max_length=200)

class Location(models.Model):
   Name=models.CharField(max_length=100) 
   ParentCode=models.BigIntegerField() 
   LocationType=models.ForeignKey(LocationType)

class Visa(models.Model): 
   Country=models.ForeignKey(Location)
   Price=models.CharField(max_length=12)
   ActionUser=models.ForeignKey(User,editable=False)

В forms.py У меня есть это:

class VisaForm(ModelForm):
   class Meta:
      model=Visa  

Я хочу показать комбинированный список местоположений (для поля Страна модели Visa)в форме визы, которые отфильтрованы специальным LocationType.

Представьте, что у меня есть LocationType со значением name=Country,pk=1visa_form я хочу показать список Location с, но не все из них.Только местоположения с locationType_id=1.

Как я могу заполнить этот комбинированный список и показать его в визовой форме?

Ответы [ 2 ]

3 голосов
/ 19 ноября 2011

Что-то в строках:

class VisaForm(ModelForm):
    def __init__(self, location_type, *args, **kwargs):
        super(VisaForm, self).__init__(*args, **kwargs)
        self.fields['Country'] = forms.ModelChoiceField(queryset=Location.objects.filter(LocationType=location_type))

    class Meta:
        model=Visa  
1 голос
/ 19 ноября 2011

Вы должны быть в состоянии использовать Django ChoiceField.Требуется аргумент choices, который вы можете установить для типа кортежа (в конце вы можете создать список для кортежа, потому что вы, вероятно, начнете со списка).Вы просто фильтруете объекты на основе имени = Страна, и pk = 1, а затем CHOICES (если хотите, чтобы ваша переменная называлась так) и устанавливаете choices = CHOICES.

Надеюсь, это поможет.

Если добавить ChoicesField к ModelForm, вы можете унаследовать его и добавить поле.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...