我有一个模型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。