【发布时间】:2021-09-26 17:26:06
【问题描述】:
我正在尝试在 Django 的迁移中自动创建两个测试用户之间的关系。我的迁移代码如下所示:
# Generated manually
from django.db import migrations, transaction
from django.contrib.auth import get_user_model
def setup_test(apps, schema_editor):
User = get_user_model()
User.objects.create_superuser("admin", "admin@gm.org", "123")
x = User.objects.create_user(
username="x", email="a@gm.org", password="123"
)
y = User.objects.create_user(
username="y", email="b@gm.org", password="123"
)
UserRelatinoship = apps.get_model("myapp", "UserRelatinoship")
UserRelatinoship.objects.create(x=x, y=y, active=True)
class Migration(migrations.Migration):
dependencies = [
("myapp", "0001_initial"),
("myapp", "0002_manual"),
]
operations = [
migrations.RunPython(setup_test),
]
型号代码
from django.contrib.auth import get_user_model
User = get_user_model()
class UserRelationship(models.Model):
class Meta:
unique_together = (("x", "y"),)
x = models.ForeignKey(User, related_name="x", on_delete=models.CASCADE)
y = models.ForeignKey(User, related_name="y", on_delete=models.CASCADE)
active = models.BooleanField(default=True)
cancelled = models.BooleanField(default=False)
approved = models.BooleanField(default=False)
denied = models.BooleanField(default=False)
finalized = models.BooleanField(default=False)
def save(self, *args, **kwargs):
if self.approved:
self.active = True
if self.cancelled:
self.active = False
super().save(*args, **kwargs)
def __str__(self):
return f"{self.x}:{self.y}"
用户创建得很好,但是当我尝试创建关系时,我收到错误ValueError: Cannot assign "<User: x>": "UserRelatinoship.x" must be a "User" instance.。此外,我可以在运行服务器并手动填写表单时创建关系,即使其代码看起来大致相同(除了它使用 request.user 的一部分)。注意我修改了原始代码中的一些名称。非常感谢任何帮助!
【问题讨论】:
-
你能分享你的型号代码吗?
-
@daniel 添加到主帖