簡體   English   中英

如何在 Django 模型中設置外鍵字段以不返回任何值?

[英]How do I set a foreignkey field in Django models to return no values?

我有一個 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 - 這樣做的目的是首先加載國家/地區值,根據用戶選擇的國家/地區,我將相應地加載州和城市。

您可以以__init__方法的形式覆蓋選項,也可以在定義字段后使用設置選項的小技巧

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM