Python 如何在Django模型中设置foreignkey字段以不返回值?
我有一个Django模型,比如:Python 如何在Django模型中设置foreignkey字段以不返回值?,python,django,django-templates,modelchoicefield,Python,Django,Django Templates,Modelchoicefield,我有一个Django模型,比如: class hotel(models.Model): name = models.CharField(max_length=60) city = models.ForeignKey('city', on_delete=models.DO_NOTHING) state = models.ForeignKey('state', on_delete=models.DO_NOTHING) country = models.ForeignKey('
class hotel(models.Model):
name = models.CharField(max_length=60)
city = models.ForeignKey('city', on_delete=models.DO_NOTHING)
state = models.ForeignKey('state', on_delete=models.DO_NOTHING)
country = models.ForeignKey('country', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "hotels"
class city(models.Model):
name = models.CharField(max_length=60)
state = models.ForeignKey('state', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "cities"
class state(models.Model):
name = models.CharField(max_length=60)
country = models.ForeignKey('country', on_delete=models.DO_NOTHING)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "states"
class country(models.Model):
name = models.CharField(max_length=60)
code = models.CharField(max_length=160)
def __str__(self):
return self.name
class Meta:
verbose_name_plural = "countries"
模型形式如下:
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
[编辑]从Hotel ModelForm创建表单对象时,Django会自动填充foreignkey字段的值。我想阻止这一切
例如:
form=Hotel()
(Django自动填充城市、州和国家值)
我希望Django模板在下拉列表中返回所有国家/地区值,但不希望州和城市下拉列表返回所有国家/地区值(因此我希望州和城市下拉列表在Django模板中保持为空)。我该怎么做
PS-这样做的目的是首先加载国家值,根据用户对国家的选择,我将相应地加载州,然后加载城市。您可以使用
\uuuu init\uuu
方法覆盖这些选择,或者在定义字段后,您可以使用一些小技巧设置选择
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
# Like this
state = forms.ModelChoiceField(state.objects.all())
state.choices = []
city = forms.ModelChoiceField(city.objects.all())
city.choices = []
# Or like this...
def __init__(self, data=None, *args, **kwargs):
super().__init__(data=data, *args, **kwargs)
if not data:
self.fields['state'].queryset = state.objects.none()
self.fields['city'].queryset = state.objects.none()
指定要从DB加载值的字段,而不是使用
fields=''\uuuuu all\uuuuuu'
。一个简单的示例类似于True中指定的示例。我可以使用'exclude'并手动为state和city编写html元素,但我想在视图中使用Django的预定义表单元素。明白了。我链接的示例具有与公认答案类似的空下拉列表示例代码。:)谢谢你,莱恩。forms.ModelChoiceField(state.objects.all())中的表单是什么?