2016-11-11 44 views
0

我正在將一個Access應用程序移植到Python/Django。有一個SchoolInfo表和一個帶有指向SchoolInfo表的外鍵的校園表。在Access中,我將校園子表單(連續)嵌入到SchoolInfo表單中,其中匹配字段正確指向School_ID。因此,對於學校1我只顯示該校的校園。Django Admin中的TabularInline問題

在Django中,我將SchoolInfo表添加到Admin,並試圖使用TabularInline複製Access UI。下面是模型和管理的片斷:

class Schoolinfo(models.Model): 
    school_id = models.AutoField(db_column='School_ID', primary_key=True) # Field name made lowercase. 
    schoolcode = models.CharField(db_column='SchoolCode', max_length=10) # Field name made lowercase. 
    schoolname = models.CharField(db_column='SchoolName', max_length=50, blank=True, null=True) # Field name made lowercase. 

class Campuses(models.Model): 
    campus_id = models.AutoField(db_column='Campus_ID', primary_key=True) # Field name made lowercase. 
    campusno = models.IntegerField(db_column='CampusNo', default=1) # Field name made lowercase. 
    schoolcode = models.CharField(db_column='SchoolCode', max_length=10) # Field name made lowercase. 
    school = models.ForeignKey('Schoolinfo', models.DO_NOTHING, db_column='School_ID', unique=True) # Field name made lowercase.# school = models.IntegerField(db_column='School_ID') # Field name made lowercase. 
    campusname = models.CharField(db_column='CampusName', max_length=15, blank=True, null=True) # Field name made lowercase. 

class CampusesInline(admin.TabularInline): 
    model = Campuses 

admin.site.register(Campuses) 

class SchoolInfoAdmin(admin.ModelAdmin): 
    fields = (
    ('schoolcode', 'schoolname'), ('contactname', 'contacttitle'), ('contactphone', 'contactemail'), 
    ('clockhoursschool', 'schoolsendsawardletters'), ('tin_no', 'duns_no'), ('pell_id', 'ope_id')) 

    save_on_top = True 
    inlines = [CampusesInline,] 

admin.site.register(Schoolinfo, SchoolInfoAdmin) 

當我選擇編輯一所學校,它正確地顯示了學校的字段,然後校區TabularInline,但現在的問題是:

還有多所學校在數據庫中,每個都有一個或多個校園。 TabularInline正確顯示了在校學校的校園或校園,但它也有幾個空白記錄(我假設它與其他學校的校園記錄有關)。

如果我將「unique = True」添加到外鍵(如上面的模型所示),空白記錄消失,並且看起來都很好。不幸的是,我也放棄了內聯底部的鏈接來添加一個新的校園。

我是非常新的Python/Django,所以不能弄清楚如何解決這個問題。我想我的選擇是內聯過濾的一些類型(並從模型中取出unique = True),或者將其保留並找出如何將「添加」鏈接恢復到內聯。

有沒有關於如何解決這個問題的建議? 謝謝...

+1

extra = 0在您的CapmusesInline將刪除多餘的空記錄,這是添加新記錄 – Serjik

回答

0

,但它也有幾個空白的記錄(我假設其他學校相關 校園記錄)。

這些「空白」記錄是爲學校增加新的校園。您可以使用CampusInline上的「extra」屬性來控制空行的數量。

如果我將外部關鍵字添加爲「unique = True」(如上面的型號 所示),空白記錄消失,並且看起來都很好。不幸的是,我還鬆了內聯底部的鏈接來添加一個新的校園。

如果您在「學校」字段中添加「唯一」,那意味着學校只能在校園表中出現一次。對於外鍵,這通常不會(通常)很有意義。

+0

謝謝克里斯。那很簡單。沒有在內聯部分的文檔中看到這一點。看起來像一個奇怪的默認有4個空行添加。回覆:獨一無二。我把它放在校園的外鍵欄中,它認爲它會阻止校園出現在超過1所學校,這是我們期望的。我的錯。感謝您的解決方案。 – RMittelman