我在my reg_group应用程序的models.py中创建了一个models.py类
from django.contrib.auth.models import AbstractUser
from django.db import models
from django.utils.html import escape, mark_safe
class User(AbstractUser):
is_client = models.BooleanField(default=False)
is_agency = models.BooleanField(default=False)
is_vendor = models.BooleanField(default=False)
email = models.EmailField(max_length=255, default=None, blank=True, null=True)
class User_Info(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, primary_key=True)
def __str__(self):
return self.user.name我还有另一个应用程序notification,它的models.py是这样的:
from django.db import models
from swampdragon.models import SelfPublishModel
from .serializers import NotificationSerializer
class Notification(SelfPublishModel, models.Model):
serializer_class = NotificationSerializer
message = models.TextField()当我运行python manage.py runserver时,我会得到错误
django.core.exceptions.FieldError:类“User”中的本地字段“email”与基类“AbstractUser”中的同名字段冲突
但是在email数据库中没有notification字段。
数据库的原始代码如下:
CREATE TABLE "notifications_notification" (
"id" integer NOT NULL PRIMARY KEY AUTOINCREMENT,
"level" varchar(20) NOT NULL,
"actor_object_id" varchar(255) NOT NULL,
"verb" varchar(255) NOT NULL,
"description" text,
"target_object_id" varchar(255),
"action_object_object_id" varchar(255),
"timestamp" datetime NOT NULL,
"public" bool NOT NULL,
"action_object_content_type_id" integer,
"actor_content_type_id" integer NOT NULL,
"recipient_id" integer NOT NULL,
"target_content_type_id" integer,
"deleted" bool NOT NULL,
"emailed" bool NOT NULL,
"data" text,
"unread" bool NOT NULL,
FOREIGN KEY("recipient_id") REFERENCES "reg_group_user"("id") DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY("target_content_type_id") REFERENCES "django_content_type"("id") DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY("actor_content_type_id") REFERENCES "django_content_type"("id") DEFERRABLE INITIALLY DEFERRED,
FOREIGN KEY("action_object_content_type_id") REFERENCES "django_content_type"("id") DEFERRABLE INITIALLY DEFERRED
);当然了,auto-generated。
我不明白为什么在没有这样的公共字段的情况下,我会在字段中发生冲突?
发布于 2019-07-15 11:30:15
您不需要在您的Email模型上有一个User字段,因为它已经存在于AbstractUser中。所以,只要改变这个:
class User(AbstractUser):
is_client = models.BooleanField(default=False)
is_agency = models.BooleanField(default=False)
is_vendor = models.BooleanField(default=False)
email = models.EmailField(max_length=255, default=None, blank=True, null=True)对此:
class User(AbstractUser):
is_client = models.BooleanField(default=False)
is_agency = models.BooleanField(default=False)
is_vendor = models.BooleanField(default=False)您可以继续使用Email字段,因为它包含在AbstractUser中。
有关其他信息,请参阅Django Docs
https://stackoverflow.com/questions/57029010
复制相似问题