这个Django迁移错误消息是什么意思?

这个Django迁移错误消息是什么意思?,django,django-models,Django,Django Models,当我尝试为下面所示的Django模型创建迁移时,我收到一条错误消息,我不明白。我试图模拟一个网站成员谁可以添加一个或多个其他成员作为朋友或追随者。此外,成员可以阻止任何其他成员。以下是我的模型: class Member(models.Model): FRIEND = "friend_of" FOLLOWS = "follows" RELATION_TYPES = ((FRIEND, "friend"), (FO

当我尝试为下面所示的Django模型创建迁移时,我收到一条错误消息,我不明白。我试图模拟一个网站成员谁可以添加一个或多个其他成员作为朋友或追随者。此外,成员可以阻止任何其他成员。以下是我的模型:

class Member(models.Model):
    FRIEND = "friend_of"
    FOLLOWS = "follows"
    RELATION_TYPES = ((FRIEND, "friend"), (FOLLOWS, "follower"))

    user = models.OneToOneField(User, on_delete=models.CASCADE)
    relations = models.ManyToManyField(
        "self", choices=RELATION_TYPES, through="MemberRelation"
    )
    blocks = models.ManyToManyField("self", through="MemberBlock")

    def __str__(self):
        return self.user.first_name

class MemberRelation(models.Model):
    source = models.ForeignKey(
        "Member", related_name="source_member", on_delete=models.CASCADE
    )
    target = models.ForeignKey(
        "Member", related_name="target_member", on_delete=models.CASCADE
    )
    relation = models.CharField(max_length=8)  # Contains Member.FRIEND or .FOLLOWER

    def __str__(self):
        return "Member {} {} member {}".format(self.source, self.relation, self.target)

class MemberBlock(models.Model):
    source = models.ForeignKey(
        "Member", related_name="blocker", on_delete=models.CASCADE,
    )
    target = models.ForeignKey(
        "Member", related_name="blocked", on_delete=models.CASCADE,
    )

    def __str__(self):
        return "Member {} is blocking Member {}".format(self.source, self.target)
我从Member和MemberRelaton类开始,迁移没有出现任何错误。但是在我的成员模型中添加MemberBlock类和
blocks
ManyToMany字段之后,当我运行
makemigrations
命令时,我得到了以下错误,我不理解:

  You are trying to change the nullable field 'source' on memberrelation to non-nullable without a default; we can't do that (the database needs something to populate existing rows).
  Please select a fix:
  1) Provide a one-off default now...
  2) Ignore for now, and let me handle existing rows with NULL myself (e.g. because you added a RunPython or RunSQL operation to handle NULL values in a previous data migration)
  3) Quit, and let me add a default in models.py
  Select an option:
我不理解这个错误,因为1)现在我添加了一个MemberBlock类,它在讨论MemberRelation类。这门课以前没有问题;2)错误是说“source”字段可以为空,而我认为不是

最初,我声明了
,没有
通过
选项,并且得到了相同的错误。我添加了through选项,因为我认为Django可能会被一个类中有两个递归的多个字段这一事实弄糊涂

我做错了什么?

以下是解决方案:

blocked = models.ManyToManyField("self", symmetrical=False, related_name="members")