【问题标题】:Problems with TabularInline in Django AdminDjango Admin 中的 TabularInline 问题
【发布时间】: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 将删除多余的空记录,用于添加新记录

标签: python mysql django


【解决方案1】:

但它也有几条空白记录(我假设这些记录与 其他学校的校园记录)。

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

如果我在外键中添加“unique=True”(如模型所示 以上),空白记录消失,一切看起来都很好。很遗憾, 我还丢失了内联底部的链接以添加新校区。

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

【讨论】:

  • 谢谢克里斯。那很简单。在内联部分下的文档中没有看到。添加 4 个空白行似乎是一个奇怪的默认设置。回复:独一无二。我把它放在 Campuses 的外键列中,认为它会阻止一个校园出现在超过 1 所学校中,这是理想的。我的错。感谢您的解决方案。
猜你喜欢
  • 2020-07-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-02-18
  • 2021-12-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多