使用内联formset和Model表单在Admin中进行表单验证

KRH*_*KRH 5 python django django-forms django-admin

我有一个模型,OrderedList,它是一个用户订购的内容对象的列表.OrderedList有几个属性,包括它所属的站点.

内容对象通过OrderedListRow类附加到它上面,该类通过admin中的内联formset进入OrderedList的管理员.

class OrderedList(GenericList):

    objects = models.Manager()
    published = GenericListManager()

class OrderedListRow(models.Model):

    list = models.ForeignKey(OrderedList)
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveSmallIntegerField()
    content_object = generic.GenericForeignKey("content_type", "object_id")
    order = models.IntegerField('order', blank = True, null = True)
Run Code Online (Sandbox Code Playgroud)

(OrderedList从较大的GenericList摘要继承站点字段).

这是我的问题; 当用户保存管理表单时,我想验证每个OrderedListRow映射到的每个内容对象属于OrderedList所执行的同一站点(该列表只能属于1个站点;内容对象可以属于多个).

我可以覆盖OrderedList的管理表单的clean(),但它不包含包含OrderedListRows的内联formset,因此它无法访问该数据.我可以覆盖OrderedListRows的内联formset的干净,但它无法到达列表.我需要在表单验证的上下文中使用某种方式来访问OrderedList的表单数据和表单集的表单数据,这样我就可以针对OrderedList的站点检查OrderedListRow的内容对象的所有站点,如果出现问题则抛出验证错误.到目前为止,我还没有找到包含OrderedRow和OrderedListRows的清理数据的函数.

Dan*_*man 5

self.instance在内联formset中,应该引用父对象,即OrderedList.