我在简单的 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)
这就是我尝试过但没有成功的方法。
如果你想在管理面板中过滤一些东西,你可以使用
list_filter
将它设置为包含你想要过滤的模型字段的列表或元组。您也可以使用 __
跨越关系,例如
@admin.register(Version)
class VersionAdmin(admin.ModelAdmin):
list_filter = ['brand']