【发布时间】:2019-12-30 09:40:59
【问题描述】:
我有一个 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"
ModelForm 如下:
class Hotel(ModelForm):
class Meta:
model = hotel
fields = '__all__'
[编辑] 从 Hotel ModelForm 创建表单对象时,Django 会自动填充外键字段的值。我想阻止它。
例如:
form = Hotel()(Django 自动填充城市、州和国家值)
我希望我的 Django 模板返回下拉列表中的所有国家/地区值,但不返回州和城市下拉列表(因此我希望 Django 模板中的州和城市下拉列表保持为空)。我该怎么做?
PS - 这样做的目的是首先加载国家/地区值,根据用户选择的国家/地区,我将加载州,然后是相应的城市。
【问题讨论】:
-
不使用
fields='__all__',而是指定要从数据库加载值的字段。一个简单的例子就是simpleisbetterthancomplex.com/tutorial/2018/01/29/… -
是的。我可以使用“排除”并为州和城市手动编写 html 元素,但我想在我的视图中使用 Django 的预定义表单元素。
-
知道了。我链接的示例具有与接受的答案类似的空下拉列表示例代码。 :)
标签: python django django-templates modelchoicefield