【问题标题】:How to add condition on Django model foreign key?如何在 Django 模型外键上添加条件?
【发布时间】:2021-01-26 06:14:24
【问题描述】:

我是 Django 的新手,请您帮帮我,我有两个模型,分别是 Continent 和 Country,在 Country 表单中,我只想在下拉列表中显示其状态为 true 的 Continents?

型号

    from django.db import models
    from smart_selects.db_fields import GroupedForeignKey, ChainedForeignKey
    
    
    class Continent(models.Model):
        name = models.CharField(max_length=255)
        status=models.BooleanField(default=True)
    
        def __str__(self):
            return self.name
    
    class Country(models.Model):
        continent = models.ForeignKey(Continent, null=True, on_delete=models.SET_NULL)
        status=models.BooleanField(default=True)
        name = models.CharField(max_length=255)
        
        def __str__(self):
            return self.name

表格

    class FormContinent(ModelForm):
        class Meta:
            model = Continent
            fields = '__all__'
    
    class FormCountry(ModelForm):
        class Meta:
            model = Country
            fields = '__all__'

观看次数

def continent(request):
    form = FormContinent()
    if request.method == 'POST':
        form = FormContinent(request.POST)
        form.is_valid()
        form.save()
        return redirect('/continent')
    else:
        context = {'form': form}
        return render(request, 'continent.html', context)


def country(request):
    form = FormCountry()
    if request.method == 'POST':
        form = FormCountry(request.POST)
        form.is_valid()
        form.save()
        return redirect('/country')
    else:
        context = {'form': form}
        return render(request, 'country.html', context)

【问题讨论】:

    标签: django


    【解决方案1】:

    您可以使用limit_choices_to=… parameter [Django-doc]:

    class Country(models.Model):
        continent = models.ForeignKey(
            Continent,
            # ↓ limit choices to Continents with status=True
            limit_choices_to={'status': True},  
            null=True,
            on_delete=models.SET_NULL
        )
        # …

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-11-23
      • 1970-01-01
      • 2020-07-06
      • 2015-08-30
      • 2011-11-25
      • 1970-01-01
      • 2021-06-24
      相关资源
      最近更新 更多