Django 限制查询集

问题描述 投票:0回答:0

我在简单的 Django 项目中有三个模型。 我想在管理页面中添加时按品牌过滤版本。 我尝试过不同的方式,其中一种包含在附加代码中。 admin.py 文件也像它显示的那样。 有什么建议吗?

class Brand(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Version(models.Model):
    name = models.CharField(max_length=100)
    manufacturer = models.ForeignKey(Brand, on_delete=models.CASCADE)

    def __str__(self):
        return f"{self.name} ({self.manufacturer})"




class Car(models.Model):
    brand = models.ForeignKey(Brand, on_delete=models.CASCADE)
    version = models.ForeignKey(
        Version,
        on_delete=models.CASCADE,
        limit_choices_to=Q(manufacturer=OuterRef('manufacturer_id'))
    )
    year = models.PositiveIntegerField()
    color = models.CharField(max_length=50)
    mileage = models.PositiveIntegerField()

    def __str__(self):
        return f"{self.brand} {self.version} {self.year} {self.color}"```


class CarAdminForm(forms.ModelForm):
    class Meta:
        model = Car
        fields = '__all__'

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        if self.instance:
            self.fields['version'].queryset = self.instance.brand.versions.all()


class CarAdmin(admin.ModelAdmin):
    form = CarAdminForm




admin.site.register(Car, CarAdmin)

this is how I tried but w/o success.
django django-models django-admin django-queryset django-filter
© www.soinside.com 2019 - 2024. All rights reserved.