我正在尝试实现一个允许两个Profile
模型对象成为Pair
模型对象的一部分的系统。
以下是配置文件,后面是配对模型:
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True, blank=True)
pair = models.ManyToManyField('self', through='Pair',
symmetrical=False,
related_name='pair_to+')
class Pair(models.Model):
requester = models.ForeignKey(Profile, related_name='pairing_requester')
accepter = models.ForeignKey(Profile, related_name='pairing_accepter')
requester_learns = models.CharField(max_length=60, null=True)
requester_teaches = models.CharField(max_length=60, null=True)
配置文件之间的关系应该是对称的,这样(profile1,profile2)是一个唯一的对象,我不应该期望创建(profile2,profile1)。
所以,根据this article,我正试图建立这种关系。
在makemigrations
后,我收到错误:
ERRORS:
<function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8>: (models.E022) <function ManyToManyField.contribute_to_class.<locals>.resolve_through_model at 0x1044b47b8> contains a lazy reference to user_profile.pair, but app 'user_profile' doesn't provide model 'pair'.
user_profile.Profile.pair: (fields.E331) Field specifies a many-to-many relation through model 'Pair', which has not been installed.
我做错了什么?
答案 0 :(得分:1)
class Pair(models.Model):
requester = models.ForeignKey(Profile, related_name='pairing_requester')
accepter = models.ForeignKey(Profile, related_name='pairing_accepter')
requester_learns = models.CharField(max_length=60, null=True)
requester_teaches = models.CharField(max_length=60, null=True)
class Profile(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL,
on_delete=models.CASCADE,
null=True, blank=True)
pair = models.ManyToManyField('self', through='Pair',
symmetrical=False,
related_name='pair_to+')
你做错了的事情是你需要在调用与另一个模型的关系之前提及模型,django将首先创建PAIR模型然后将模型安装到另一个模型。所以使用它并在迁移之前删除旧的迁移文件