所以,我是新来的Django,并要描述的场景:有一堆Persons
,并有一堆Items
,和人通过Items
另一个Person
。Django的:模型有通过中间模型中的两个多对多关系
我有以下型号:
class Item(models.Model):
title = models.CharField(max_length=1024, blank=False)
def __unicode__(self):
return self.title
class Person(models.Model):
name = models.CharField(max_length=127, blank=False)
out_item = models.ManyToManyField(
Item,
through='Event',
through_fields=('from_user', 'item'),
related_name='giver'
)
in_item = models.ManyToManyField(
Item,
through='Event',
through_fields=('to_user', 'item'),
related_name='receiver'
)
def __unicode__(self):
return self.name
class Event(models.Model):
item = models.ForeignKey(Item)
from_user = models.ForeignKey(Person, related_name='event_as_giver')
to_user = models.ForeignKey(Person, related_name='event_as_receiver')
但makemigrations
告诉我app.Person: (models.E003) The model has two many-to-many relations through the intermediate model 'app.Event'.
我不知道我做错了什么?或者什么是实现这种情况的干净方式?也许我可以将Event
分成GiveEvent
和ReceiveEvent
?但是这只会让直觉变得不那么直观,因为当物品通过时实际上只有一个事件。
看来,新的Django System Check框架在同一个模型上使用相同的“through”模型不接受两个多对多字段。所以这就是为什么这个错误信息表明失败。这意味着您的案件的预期行为。但是我想知道为什么它以这种方式实现并禁止它..好问题.. – 2014-10-18 05:17:12