Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何在Django模型中设置foreignkey字段以不返回值?_Python_Django_Django Templates_Modelchoicefield - Fatal编程技术网

Python 如何在Django模型中设置foreignkey字段以不返回值?

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('

我有一个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('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())中的表单是什么?