【发布时间】:2011-12-11 20:19:51
【问题描述】:
我需要建立一对一的关系,它也必须是通用的。也许你可以给我一个更好的设计建议。到目前为止,我想出了以下模型
class Event(models.Model):
# skip event related fields...
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
class Meta:
unique_together = ('content_type', 'object_id')
class Action1(models.Model):
# skip action1 related fields...
events = generic.GenericRelation(Event, content_type_field='content_type', object_id_field='object_id')
@property
def event(self):
return self.events.get() # <<<<<< Is this reasonable?
class Action2(models.Model):...
在事件列表中的 Django Admin 中,我想收集所有操作,然后我想从那里转到管理页面进行操作。是否可以避免在动作模型中创建 event 属性?有更好的解决方案吗?最好将字段events 和属性event 组合在一个定义中。我正在使用的项目使用 Django 1.1
【问题讨论】:
-
如果你真的想避免
events,你需要手动实现对Event表的查询,如下所示。我仍然更喜欢将events作为 GenericRelation,然后在event属性中使用self.events.first()。此外,这将使您将来更容易删除唯一约束。
标签: python django django-models django-admin one-to-one