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 (将#修改为@)