Python CheckConstraint不断抛出FieldError
所以我一直在努力在我的项目中实现以下系统。类似于Twitter跟踪系统的工作原理。我环顾四周,发现了一些想法。现在,my models.py的整体外观如下所示:Python CheckConstraint不断抛出FieldError,python,django,database,django-models,check-constraints,Python,Django,Database,Django Models,Check Constraints,所以我一直在努力在我的项目中实现以下系统。类似于Twitter跟踪系统的工作原理。我环顾四周,发现了一些想法。现在,my models.py的整体外观如下所示: class Profile(models.Model): user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True) friend = models.ManyToManyField("User
class Profile(models.Model):
user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
friend = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)
class Meta:
constraints = [
models.CheckConstraint(check=~Q(user=F('friend')), name="user_cannot_be_following_themselves"),
]
型号.py
from django.contrib.auth.models import AbstractUser
from django.db.models.fields import DateTimeField
from django.utils import timezone
from django.db import models
# pylint: disable=no-member
class User(AbstractUser):
pass
class Profile(models.Model):
user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
friend = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)
class Post(models.Model):
creator = models.ForeignKey("User", on_delete=models.CASCADE, related_name="post_creator")
content = models.TextField(max_length=250, blank=True)
created = models.DateTimeField(auto_now_add=True)
likes = models.PositiveIntegerField(default=0)
def serialize(self):
return {
"id": self.id,
"creator": self.creator.username,
"content": self.content,
"created": self.created.strftime("%d %b %Y, %H:%M"),
"likes": self.likes
}
现在的问题是,用户可以按照我不希望的方式进行操作。当然,我尝试使用CheckConstraint,在我的配置文件模型中添加一个类元,如下所示:
class Profile(models.Model):
user = models.OneToOneField("User", on_delete=models.CASCADE, primary_key=True)
friend = models.ManyToManyField("User", related_name='following', blank=True, symmetrical=False)
class Meta:
constraints = [
models.CheckConstraint(check=~Q(user=F('friend')), name="user_cannot_be_following_themselves"),
]
这会不断产生此错误django.core.exceptions.FieldError:无法将关键字“friend”解析到字段中。每次我尝试迁移更改时(在makemigrations之后),选择是:id、user、user\u id
。即使我删除了Meta类并尝试进行迁移,然后再次迁移,我仍然会收到相同的错误。这几乎就好像元类破坏了整个数据库,根本不允许我迁移更改。即使在我删除了所有迁移文件(除了init.py)并尝试进行迁移和从头开始迁移之后,我仍然会遇到这个错误。因此,这意味着我必须继续回到我的项目的早期版本,并从那里重新开始
除了CheckConstraints,我是否可以使用其他方法来确保两个字段的值不相同,或者是否有人理解我遇到的错误,并且可以看到我做错了什么?使用显式的方法,并在那里添加约束。