我有一个模型OrderedList,该模型旨在作为用户订购的内容对象的列表。 OrderedList具有几个属性,包括它所属的站点。

内容对象通过OrderedListRow类附加到该对象,该类通过admin中的内联表单集带入OrderedList的admin中。

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)

(OrderedList从较大的GenericList摘要继承了site字段)。

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

我可以覆盖OrderedList的管理表单的clean(),但它不包含包含OrderedListRows的内联表单集,因此无法访问该数据。我可以覆盖OrderedListRows的内联表单集的干净程度,但无法到达列表。我需要在表单验证的上下文中采取某种方式来访问OrderedList的表单数据和formset的表单数据,以便我可以针对OrderedList的站点检查OrderedListRow内容对象的所有站点,并在出现问题时引发验证错误。到目前为止,我还没有找到包含OrderedRow和OrderedListRows的清除数据的函数。

最佳答案

在内联表单集中,self.instance应该引用父对象,即OrderedList。

09-28 07:08