我会快速制作一份简历,以便您更好地理解结构:
汽车可以由不同的驱动程序驱动,这些驱动程序可以获得奖杯。奖杯必须与司机和他们使用的汽车相关联。
class CarDriver(models.Model):
driver = models.ForeignKey('Driver', null=False)
car = models.ForeignKey('Car', null=False)
trophies = models.ManyToManyField('Trophy', blank=True)
class Driver(models.Model):
name = models.CharField(max_length=255)
class Car(models.Model):
name = models.CharField(max_length=255)
drivers = models.ManyToManyField(Driver, blank=True, through=CarDriver)
class Trophy(models.Model):
position = models.IntegerField(default=1)
我想在Django Admin中显示模型Car但是使用复选框列表来选择驱动程序,因此驱动程序选择将比使用内联更快:
class CardDriverInline(admin.TabularInline):
model = CarDriver
class CarAdmin(admin.ModelAdmin):
inlines = [
CardDriverInline,
]
admin.site.register(Car, CarAdmin)
有没有办法使用复选框来选择多个驱动程序?
答案 0 :(得分:0)
根据Django docs,当您对 ManyToManyField 使用到参数时,管理员默认情况下不会显示小部件。
因此,在这种情况下,必须不幸地使用内联。
但是,如果您不使用到参数,则可以像这样使用 ModelAdmin :
class CarAdmin(admin.ModelAdmin):
formfield_overrides = {
models.ManyToManyField: {'widget': CheckboxSelectMultiple},
}
这样你就有了复选框,但你失去了奖杯参考。
我知道,这不是一个公平的世界。我认为它会以另一种方式存在,但Django文档清楚地说明了为什么必须使用到参数的内联。