如何避免django"与相关的m2m字段冲突"错误?

luc*_*zbo 3 python django django-models

我有很多具有投票功能的模型,所以我创建了一个这样的结构:

class Voteable(models.Model):
    likes_balance = models.IntegerField(default=0, editable=False)
    votes = models.ManyToManyField(User, blank=True, editable=False)
    likes = models.ManyToManyField(User, blank=True, editable=False)

    class Meta:
        abstract = True

class Item(Voteable):
    title = models.CharField(max_length=20, db_index=True)
    description = models.TextField(max_length=1000)
    contact_user = models.ForeignKey(User, null=True, blank=True)

    class Meta:
        abstract = True

class Movie(Item):
    cover = models.ImageField(upload_to='images/covers/')

class Car(Item):
    seller = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)

当我尝试使用"python manage.py syncdb"创建表时,我收到错误消息:

m2m字段的访问者'喜欢'与相关字段'User.movi​​e_set'的冲突.将related_name参数添加到"likes"的定义中.

因为我在Item类中有更多的字段,所以不想将它们全部复制到所有子类,只是设置像错误建议的related_name.

有什么建议怎么处理吗?

luc*_*zbo 10

我在Django文档中找到了一个解决方案.

可以用抽象模型编写这样的东西:related_name="%(app_label)s_%(class)s_related"