Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.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 通过自定义用户模型的ProxyModel删除用户_Django_Python 2.6 - Fatal编程技术网

Django 通过自定义用户模型的ProxyModel删除用户

Django 通过自定义用户模型的ProxyModel删除用户,django,python-2.6,Django,Python 2.6,我的django项目实现了一个自定义用户模型MyUser。它还为我的自定义用户实现了一个proxymodel MyUserProxy,我想使用proxymodel从数据库中删除用户。请参见下面的模型和管理器 project/account/models.py from django.db import models class A(models.Model): USERNAME_FIELD = 'field1' REQUIRED_FIELDS = ['field2']

我的django项目实现了一个自定义用户模型MyUser。它还为我的自定义用户实现了一个proxymodel MyUserProxy,我想使用proxymodel从数据库中删除用户。请参见下面的模型和管理器

project/account/models.py

from django.db import models

class A(models.Model):

    USERNAME_FIELD = 'field1'
    REQUIRED_FIELDS = ['field2']

    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)

    def __init__(self, *args, **kwargs):
        super(A, self).__init__(*args, **kwargs)

class AProxy(A):

    class Meta():
        proxy = True
from django.db import models
from django.conf import settings
from A.models import A

class B(models.Model):

    a = models.OneToOneField(settings.AUTH_USER_MODEL)
    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)
    mtm = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='mtm')

    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
项目/账户/经理.py

我的项目中的其他几个应用程序与我的自定义用户MyUser有ForeignKey关系,因此当我删除一个用户时,与该用户相关的记录也会被删除。当我在my settings.py中将AUTH_USER_模型指定为MyUser时,这一切正常,相关应用程序的记录会随用户一起删除

project/example/settings.py

INSTALLED_APPS = ()
    'A',
    'B',
)
AUTH_USER_MODEL = 'A.Aproxy'
但是,当我对AUTH_USER_模型使用MyUserProxy时,我得到一个错误

OperationalError: (1054, "Unknown column 'otherapp.myuserproxy_id'
in 'where clause'")
Django似乎认为应用otherapp的ForeignKey数据库列是myuserproxy_id,而实际上是myuser_id,因为模型myuser指定了它。为什么django将我的proxymodel MyUserProxy的名称与数据库列相关联


事实证明,我的otherapp模型与AUTH_USER_模型有很多关系。许多关系获取从proxymodel名称MyProxUser_id派生的列名,而ForeignKey关系获取从代理myuser_id的模型派生的列名。Otherapp使用迁移,因此列名myuser_id没有发生更改,从而导致操作错误。为了澄清,我将模型和结果数据库结构放在下面

项目/X/settings.py

INSTALLED_APPS = ()
    'A',
    'B',
)
AUTH_USER_MODEL = 'A.Aproxy'
project/A/models.py

from django.db import models

class A(models.Model):

    USERNAME_FIELD = 'field1'
    REQUIRED_FIELDS = ['field2']

    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)

    def __init__(self, *args, **kwargs):
        super(A, self).__init__(*args, **kwargs)

class AProxy(A):

    class Meta():
        proxy = True
from django.db import models
from django.conf import settings
from A.models import A

class B(models.Model):

    a = models.OneToOneField(settings.AUTH_USER_MODEL)
    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)
    mtm = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='mtm')

    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
项目/B/models.py

from django.db import models

class A(models.Model):

    USERNAME_FIELD = 'field1'
    REQUIRED_FIELDS = ['field2']

    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)

    def __init__(self, *args, **kwargs):
        super(A, self).__init__(*args, **kwargs)

class AProxy(A):

    class Meta():
        proxy = True
from django.db import models
from django.conf import settings
from A.models import A

class B(models.Model):

    a = models.OneToOneField(settings.AUTH_USER_MODEL)
    field1 = models.CharField(max_length=255, unique=True)
    field2 = models.CharField(max_length=255, unique=True)
    mtm = models.ManyToManyField(settings.AUTH_USER_MODEL, related_name='mtm')

    def __init__(self, *args, **kwargs):
        super(B, self).__init__(*args, **kwargs)
结果在表结构中

A_a
+----+--------+--------+
| id | field1 | field2 |
+----+--------+--------+

B_b
+----+------+--------+--------+
| id | a_id | field1 | field2 |
+----+------+--------+--------+

B_b_mtm
+----+------+-----------+
| id | b_id | aproxy_id |
+----+------+-----------+
|  1 |    1 |         1 |
+----+------+-----------+
为什么django对许多字段应用不同的列名,我不清楚