Django Admin中的TabularInline问题

时间:2016-11-11 17:53:42

标签: python mysql django

我将Access应用程序移植到Python / Django。有一个SchoolInfo表和一个Campuses表,其外键指向SchoolInfo表。在Access中,我有一个嵌入到SchoolInfo表单中的Campuses子表单(连续),其中匹配字段定义为正确指向School_ID。因此,对于学校1,我只展示该学校的校园。

在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 个答案:

答案 0 :(得分:0)

  

但它也有几个空白记录(我假设与之相关   其他学校的校园记录。)

这些“空白”记录用于为学校增加新的校园。您可以使用CampusInline上的“额外”属性来控制空行数。

  

如果我将“unique = True”添加到外键(如模型中所示)   空白记录消失,一切看起来都很好。不幸,   我还松开了内联底部的链接,以添加一个新的校园。

如果在“学校”字段中添加“唯一”,则表示学校只能在校园表中出现一次。哪个(通常)对外键没有多大意义。