2017-07-19 68 views
0

我將做一個快速的簡歷,這樣你可以更好地瞭解結構:如何通過模型使用複選框在Django管理爲多對多場

汽車可以通過不同的司機這些驅動司機可以得到獎盃。獎盃必須與司機和他們使用的汽車相關聯。

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管理模型車,但使用複選框列表來選擇驅動程序,使駕駛員的選擇會比使用內聯方式更快:

class CardDriverInline(admin.TabularInline): 
    model = CarDriver 


class CarAdmin(admin.ModelAdmin): 
    inlines = [ 
     CardDriverInline, 
    ] 


admin.site.register(Car, CarAdmin) 

是有一種方法可以使用複選框進行多個驅動程序選擇?

回答

0

根據Django的docs,當您使用通過參數傳遞給ManyToManyField,管理員不會默認顯示的Widget。

因此,在這種情況下,您的必須使用內聯,不幸的是。

但是,如果你不使用通過的說法,你可以簡單地有的ModelAdmin這樣的:

class CarAdmin(admin.ModelAdmin): 
    formfield_overrides = { 
     models.ManyToManyField: {'widget': CheckboxSelectMultiple}, 
    } 

這種方式,你有複選框,但你失去的獎盃參考。

我知道,這不是一個公平的世界。我認爲它會以另一種方式存在,但Django文檔清楚地說明了爲什麼您必須使用參數的內聯。

相關問題