我是一个Django新手,我有一个关于在生产代码中重用管理界面的内联formset的问题.考虑以下模型:
class Attribute(models.Model):
name = models.CharField(max_length=50)
class Person(models.Model):
lastName = models.CharField(max_length=50)
firstName = models.CharField(max_length=50)
email = models.CharField(max_length=50)
attributes = models.ManyToManyField(Attribute, through='AttributeValue')
class AttributeValue(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
attribute = models.ForeignKey(Attribute, on_delete=models.PROTECT)
isConsumer = models.BooleanField()
value = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
这个管理界面出来很漂亮.我使用了以下admin.py:
class AttributeValueInline(admin.TabularInline):
model = AttributeValue
extra = 3
class PersonAdmin(admin.ModelAdmin):
list_display = ('lastName', 'firstName','email')
fieldsets = [
('Name', {'fields': ['firstName', 'lastName']}),
('Contact Info',{'fields': ['email','phoneNumber']})
]
inlines = [AttributeValueInline]
admin.site.register(Person, PersonAdmin)
admin.site.register(Attribute)
Run Code Online (Sandbox Code Playgroud)
这几乎就是我想要的.它看起来像这样:

当我尝试在非管理员网站中实现相同的功能时,除了实际的业务逻辑之外,我还必须编写相当多的代码来执行内联表单集,表单处理.除此之外,我还遇到了这里提到的问题.
我无法将管理界面暴露给最终用户,因为我们需要一个自定义的网页设计和页面流.但是,我可以重用部分管理界面代码而不是重新实现相同的功能吗?
任何其他减少代码的建议都是最受欢迎的.