微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CheckConstraint不断抛出FieldError

如何解决CheckConstraint不断抛出FieldError

因此,我一直在努力尝试在我的项目中实施后续系统。与Twitter追踪系统的工作原理类似。我环顾四周,发现了一些想法。现在,我的整个models.py看起来像这样:

models.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",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
        }

现在的问题是,用户可以按照自己的意愿进行操作,这是我所不希望的。因此,我当然想通过向我的Profile模型添加一个Meta来尝试使用CheckConstraint:

class Profile(models.Model):
    user = models.OnetoOneField("User",symmetrical=False)

    class Meta:
        constraints = [
            models.CheckConstraint(check=~Q(user=F('friend')),name="user_cannot_be_following_themselves"),]

每次我尝试迁移更改时(在进行makemigrations之后),都​​会不断产生此错误django.core.exceptions.FieldError: Cannot resolve keyword 'friend' into field. Choices are: id,user,user_id。即使当我删除Meta类并尝试进行makemigrations并再次迁移时,我仍然会遇到相同的错误。几乎就像Meta类破坏了整个数据库一样,根本不会让我迁移更改。即使我删除了所有迁移文件 init .py除外)并尝试进行迁移并从头开始迁移,我仍然会收到该错误。因此,这意味着我必须继续恢复到项目的早期版本,然后从那里重新开始。

是否可以使用CheckConstraints替代方法来确保两个字段的值不相同,或者有人可以理解我收到的此错误并可以看到我在做什么错了?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。