Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何避免“django”;与相关m2m场地发生冲突”;错误?_Python_Django_Django Models - Fatal编程技术网

Python 如何避免“django”;与相关m2m场地发生冲突”;错误?

Python 如何避免“django”;与相关m2m场地发生冲突”;错误?,python,django,django-models,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, edita

我有很多具有投票功能的模型,因此我创建了如下结构:

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)
当我尝试使用“python manage.py syncdb”创建表时,会收到错误消息:

m2m字段“likes”的访问者与相关字段“User.movie\u set”冲突。在“likes”的定义中添加相关的_name参数

当然,我在Item类中有更多的字段,所以我不想将它们全部复制到所有子类中,而只是像错误中建议的那样设置相关的_名称


有没有关于如何处理的建议?

通常,如果您按照M2M定义中的建议添加了相关的名称,那么它应该可以工作:

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

    class Meta:
        abstract = True
这是因为如果不这样做,Django将在Voteable表中添加两个user_id,导致冲突,因为有两个相同的列名。添加相关的_名称会强制Django使用给定的相关_名称,而不是{Foreign Table name}_id列名

希望这有帮助。


可以在抽象模型中编写如下内容:
related_name=“%(app_label)s_%(class)s_related”

这并没有真正的帮助,因为Votable类不打算自己使用
class Meta:abstract=True
。当我将相关的_名称添加到它们时,
class Movie
class Car