显示由pk过滤的modelform中的填充组合框

时间:2011-11-19 17:36:44

标签: python django

我有这些模特:

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=1。在visa_form我想显示Location的列表,但不是全部。{1}}仅包含locationType_id=1的位置。

如何填写此组合框并以签证形式显示?

2 个答案:

答案 0 :(得分:3)

有些内容:

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 :(得分:1)

您应该可以使用django ChoiceField。它需要一个arg choices你可以设置为一个元组类型(你最后可以列出一个元组列表,因为你可能会从一个列表开始)。您只需根据name = Country和pk = 1过滤对象,然后CHOICES(如果您想为变量命名),并设置choices = CHOICES

我希望有所帮助。

只要将ChoicesField添加到ModelForm,您就可以从中继承并添加字段。