Django管理中的tabilinline问题

2024-05-08 01:59:27 发布

您现在位置:Python中文网/ 问答频道 /正文

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

在Django中,我将SchoolInfo表添加到Admin中,并尝试使用tablarinline复制accessui。以下是模型和管理的片段:

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)

当我选择一所学校进行编辑时,它会正确显示学校字段,然后是校园的表格线,但问题是:

数据库中有多个学校,每个学校都有一个或多个校区。表格线正确地显示了活动学校的一个或多个校园,但它也有几个空白记录(我假设这些记录与其他学校的校园记录有关)。在

如果向外键添加“唯一=true”(如上面的模型所示),空白记录消失,看起来都很好。不幸的是,我也失去了内联底部的链接来添加一个新的校园。在

我对Python/Django非常陌生,所以不知道如何解决这个问题。我想我的选择是在内联中进行某种类型的过滤(并从模型中去掉unique=True),或者将其保留下来,然后找出如何将“add”链接恢复到内联。在

有没有关于如何解决这个问题的建议? 谢谢。。。在


Tags: nameidtruefielddbmodelscolumn学校
1条回答
网友
1楼 · 发布于 2024-05-08 01:59:27

but it also has several blank records (which I assume are related to the campus records for other schools).

那些“空白”记录是为了给学校增加新校区。您可以使用CampusInline上的“extra”属性来控制空行的数量。在

If I add "unique=True" to the foreign key (as shown in the model above), the blank records disappear and all looks good. Unfortunately, I also loos the link at the bottom of the inline to add a new campus.

如果在“school”字段中添加“unique”,则意味着一个学校只能在校园表中出现一次。这对外键来说(通常)没有多大意义。在

相关问题 更多 >