2010-03-23 13 views
4

我有類似以下(簡化)模型:現在顯示models.ManyToManyField爲內聯,以相同的形式models.ForeignKey直列

models.py 

class Sample(models.Model): 
    name=models.CharField(max_length=200) 

class Action(models.Model): 
    samples=models.ManyToManyField(Sample) 
    title=models.CharField(max_length=200) 
    description=models.TextField() 

,如果Action.samples本來的一個ForeignKey代替ManyToManyField,當我在Sample在Django管理顯示Action作爲TabularInline,我會得到一個數列,每個都包含一個很好的形式進行編輯或添加其他Action。然而;當我使用顯示上述作爲內聯以下:

class ActionInline(admin.TabularInline): 
    model=Action.samples.through 

我得到一個選擇框列出所有可用的行動,而不是一個漂亮的形式來創建一個新Action

我的問題是:我如何顯示ManyToMany關係作爲一個內聯的表格輸入信息描述?

原則上它應該是可能的,因爲從Sample的角度來看,情況在兩種情況下是相同的;無論關係是ForeignKey還是ManyToManyRelation,每個Sample都有一個Action的列表。也;通過Sample管理頁面,我從不想從現有的Action中選擇,只創建新的或編輯舊的。

回答

0

我明白了你的觀點,但想到的情況下,你可能需要通過模型(表格)使用自定義。在這種情況下,管理內嵌表單將包含該中間模型的字段,因爲這是您要求管理員爲其創建表單的模型。

例如

class Person(models.Model): 
    name = models.CharField(max_length=128) 

class Group(models.Model): 
    name = models.CharField(max_length=128) 
    members = models.ManyToManyField(Person, through='Membership') 

class Membership(models.Model): 
    person = models.ForeignKey(Person) 
    group = models.ForeignKey(Group) 
    date_joined = models.DateField() 
    invite_reason = models.CharField(max_length=64) 

管理員應顯示Memebership模型的表單,這是因爲可編輯實例與模型相關。 在你的情況下,貫穿模型只包含2個外鍵(1爲Action模型,1爲Sample),這就是爲什麼只有動作列表出現。

如果django管理員支持嵌套內聯(there is an open ticket),你可以做你所要求的。