我需要一个嵌套的 django 管理内联, 我可以将日期字段内联包含在另一个内联中,如下所示。
我有以下模型:
class Person(models.Model):
name = models.CharField(max_length=200)
id_no = models.IntegerField()
class Certificate(models.Model):
cerfificate_no = models.CharField(max_length=200)
certificate_date = models.DateField(max_length=100)
person = models.ForeignKey(Person)
training = models.CharField(max_length=200)
class Training_Date(models.Model):
date = models.DateField()
certificate = models.ForeignKey(Certificate)
还有,下面的管理员:
class CertificateInline(admin.StackedInline):
model = Certificate
class PersonAdmin(admin.ModelAdmin):
inlines = [CertificateInline,]
admin.site.register(Person,PersonAdmin)
但是,我需要将 Training_Date 模型作为内联包含在内,这是内联证书管理的一部分。
有什么想法吗?
最佳答案
https://code.djangoproject.com/ticket/9025 有一些变化最近,但我不会屏住呼吸。
解决此问题的一种常见方法是通过为同一模型同时使用 ModelAdmin
和 Inline 来链接到第一级和第二级(或第二级和第三级)之间的管理员:
给 Certificate
一个带有 TrainingDate
作为内联的 ModelAdmin
。为 CertificateInline
设置 show_change_link = True
,以便您可以单击内联以转到其 ModelAdmin
更改表单。
管理员.py:
# Certificate change form has training dates as inline
class TrainingDateInline(admin.StackedInline):
model = TrainingDate
class CertificateAdmin(admin.ModelAdmin):
inlines = [TrainingDateInline,]
admin.site.register(Certificate ,CertificateAdmin)
# Person has Certificates inline but rather
# than nesting inlines (not possible), shows a link to
# its own ModelAdmin's change form, for accessing TrainingDates:
class CertificateLinkInline(admin.TabularInline):
model = Certificate
# Whichever fields you want: (I usually use only a couple
# needed to identify the entry)
fields = ('cerfificate_no', 'certificate_date')
# Django 1.8 introduced this, no need to make your own link
show_change_link = True
class PersonAdmin(admin.ModelAdmin):
inlines = [CertificateLinkInline,]
admin.site.register(Person, PersonAdmin)
关于python - Django Admin 嵌套内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14308050/