Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.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
Django:ManyToManyField创建重复的列名_Django_Django Models - Fatal编程技术网

Django:ManyToManyField创建重复的列名

Django:ManyToManyField创建重复的列名,django,django-models,Django,Django Models,我的应用程序中有两种类型的用户:auth.User,它来自django.contrib.auth(标准django身份验证模块)和mysql.User,它位于我自己的模块中。此外,mysql.User继承自一个抽象模型。整个过程与此类似(为了简洁起见,省略了一些字段): 如您所见,我想让多个auth.Users可以“拥有”一个给定的mysql.User和一个给定的mysql.Database,从而拥有多个域。但是,当我运行/manage.py syncdb时,会出现以下错误: _mysql_ex

我的应用程序中有两种类型的用户:
auth.User
,它来自django.contrib.auth(标准django身份验证模块)和
mysql.User
,它位于我自己的模块中。此外,
mysql.User
继承自一个抽象模型。整个过程与此类似(为了简洁起见,省略了一些字段):

如您所见,我想让多个
auth.Users
可以“拥有”一个给定的
mysql.User
和一个给定的
mysql.Database
,从而拥有多个域。但是,当我运行
/manage.py syncdb
时,会出现以下错误:

_mysql_exceptions.OperationalError: (1060, "Duplicate column name 'user_id'")
实际上,
/manage.py sql mysql
显示了错误的来源(同样,为了简洁起见,省略了一些列和ALTER TABLE语句):

但是我得到了这个错误:

 AssertionError: ForeignKey cannot define a relation with abstract class Resource
这是对Django的期望


那么,除了将
mysql.User
重命名为类似于
mysql.DBUser
的名称之外,还有什么方法可以避免Django创建的命名冲突吗?

如何分别创建多对多表,避免使用manytomy字段?您可以使用管理器或方法返回给定资源的用户列表,反之亦然

class Resource(models.Model):
    ...

   class Meta:
      abstract = True

   def owners(self):
       return ResourceOwner.objects.filter(resource=self)


class ResourceOwners(models.Model):
    resource = models.ForeignKey(Resource)
    owner = models.ForeignKey(User)

    class Meta:
      abstract = True

如何分别创建多对多表,避免使用ManyToMany字段?您可以使用管理器或方法返回给定资源的用户列表,反之亦然

class Resource(models.Model):
    ...

   class Meta:
      abstract = True

   def owners(self):
       return ResourceOwner.objects.filter(resource=self)


class ResourceOwners(models.Model):
    resource = models.ForeignKey(Resource)
    owner = models.ForeignKey(User)

    class Meta:
      abstract = True

我猜您不想在用户和数据库上分别定义所有者M2M关系,并为用户-用户关系指定直通表;因此失去了抽象的优势(尽管您可以在资源上定义“所有者”属性)。另一个(疯狂的)想法是:将“通过”设置为“%(类)所有者”,并定义两个M2M模型:UserOwner和DatabaseOwner。我真的认为它不起作用,但是…我猜您不想在用户和数据库上分别定义所有者M2M关系,并为用户-用户关系指定直通表;因此失去了抽象的优势(尽管您可以在资源上定义“所有者”属性)。另一个(疯狂的)想法是:将“通过”设置为“%(类)所有者”,并定义两个M2M模型:UserOwner和DatabaseOwner。我真的不认为它有效,虽然…这是我的第一次尝试,但你不能有一个抽象模型的外键关系。换句话说,在这个提出的方法中,资源不能是抽象的。这是我的第一次尝试之一,但不能与抽象模型有外键关系。换句话说,在这种方法中,资源不能是抽象的。
 AssertionError: ForeignKey cannot define a relation with abstract class Resource
class Resource(models.Model):
    ...

   class Meta:
      abstract = True

   def owners(self):
       return ResourceOwner.objects.filter(resource=self)


class ResourceOwners(models.Model):
    resource = models.ForeignKey(Resource)
    owner = models.ForeignKey(User)

    class Meta:
      abstract = True