我在简单的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)
这就是我尝试的方式,但没有成功。
1条答案
按热度按时间z9smfwbn1#
如果你想在管理面板中过滤一些东西,你可以使用
list_filter
将其设置为包含你想要过滤的模型字段的列表或元组。您还可以使用__
来跨越关系,例如