OneToOne关系问题

时间:2016-10-09 21:14:36

标签: django django-models

我正在实现一个独立的'like'类(不仅仅是Question类的一部分),这样我以后就可以创建Notification类,包括新的喜欢,关注和其他社交内容。

class Question(models.Model):
    like = models.OneToOneField('Like',related_name='like_QUESTION',null=True, blank=True)

class Like(models.Model):
    what_post_is_liked = models.OneToOneField('Question', related_name='what_post_is_liked_LIKE')
    who_liked = models.OneToOneField('UserProfile', related_name='who_liked_LIKE')
    whom = models.OneToOneField('UserProfile', related_name='whom_LIKE')

如何通过Question类的'like'属性获取类的属性('what_post_is_liked')?根据关于OneToOne关系的文档,我应该在'like'之后写出Like类的属性,就像这个e.like.who_liked一样?

questions = Question.objects.filter(whom=request.user.profile)
for e in questions:
            print(e.like)

虽然'Like'对象存在,'e.like'返回None,这意味着'like'不会自动继承'Like'新创建的对象?

like = Like(whom=a,who_liked=b,what_post_is_liked=c)
like.save()

我已经达到了总质量。有人可以解释一下它是如何运作的吗?如何自动复制/继承并通过“问题”类获得“喜欢”属性?

1 个答案:

答案 0 :(得分:0)

OneToOneField可能不是这里的用户。通过一对一的关系,每个Question最多只能有一个Like,所以您要找的是ForeignKeyForeignKey应该在您的赞模型中。所以我们有

class Question(models.Model):
    marks = models.IntegerField() # whatever question related field
    # there's not like here.

class Like(models.Model):
    what_post_is_liked = models.ForeignKey('Question', related_name='what_post_is_liked_LIKE')
    who_liked = models.OneToOneField('UserProfile', related_name='who_liked_LIKE')
    whom = models.OneToOneField('UserProfile', related_name='whom_LIKE')

然后你可以做

questions = Question.objects.filter(like__whom=request.user.profile)

如果你希望你喜欢的对象可以链接到除了问题之外的许多不同类型的对象,你将不得不使用GenericForeignKey,这是更强大的(并且更复杂一点)