我有这些模特:
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
的位置。
如何填写此组合框并以签证形式显示?
答案 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
,您就可以从中继承并添加字段。