【发布时间】:2016-11-11 17:53:41
【问题描述】:
我正在将一个 Access 应用程序移植到 Python/Django。有一个 SchoolInfo 表和一个带有指向 SchoolInfo 表的外键的 Campuses 表。在 Access 中,我有一个 Campuses 子表单(连续)嵌入到 SchoolInfo 表单中,其中匹配字段定义正确,指向 School_ID。所以对于学校 1,我只显示该学校的校园。
在 Django 中,我将 SchoolInfo 表添加到 Admin 并尝试使用 TabularInline 复制 Access UI。这是模型和管理员的sn-ps:
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,但问题是:
数据库中有多个学校,每个学校都有 1 个或多个校区。 TabularInline 正确显示了活跃学校的一个或多个校区,但它也有几个空白记录(我假设这些记录与其他学校的校区记录有关)。
如果我在外键中添加“unique=True”(如上模型所示),空白记录消失,一切看起来都很好。不幸的是,我还丢失了内联底部的链接以添加新校区。
我对 Python/Django 非常陌生,所以不知道如何解决这个问题。我想我的选择是内联中的某种类型的过滤(并从模型中取出 unique=True ),或者将其保留并弄清楚如何将“添加”链接恢复到内联。
关于如何解决这个问题有什么建议吗? 谢谢...
【问题讨论】:
-
extra = 0 in your CapmusesInline 将删除多余的空记录,用于添加新记录