2017-07-17 84 views
1

我有两种模式:QuestionUserEdus添加更多与外键的关联

UserEdus可以对Question进行投票。

投票后,Question存储投票的关联UserEdus列表。我不知道如何创建和添加此关联。

是说Question可以有很多UserEdus想想这个问题的正确方法吗?

这是我到目前为止。

class Question(models.Model): 
title = models.CharField(max_length=500, null=False) 
content = models.TextField(max_length=10000, null=False) 
author = models.ForeignKey('UserEdus', null=False) 
solution_found = models.BooleanField(default=False, null=False) 
points = models.IntegerField(default=1, null=False) 
post_date = models.DateField(default=date.today) 

class UserEdus(models.Model): 
user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True) 
bio = models.TextField(max_length=400, help_text="Enter your bio details here.") 
votes = models.ForeignKey(Question, null=True) 

一旦撞上给予好评按钮这一观点被称为,

def upvote(request,pk): 
question = get_object_or_404(Question, pk=pk) 
question.points += 1 
request.user.useredus.votes_set.add(question) 
question.save() 

这将返回错误'UserEdus' object has no attribute 'votes_set'

我在做什么错?文档遵循这种模式。

回答

1

我想你正在寻找的是related_name参数和ManyToManyField模型字段。我会改变:

votes = models.ForeignKey(Question, null=True) 

要:

votes = models.ManyToManyField("Question", related_name="votes") 

这样,你可以做一个查询,如下所示:

somevar = Question.objects.get(pk=1) 
all_votes = somevar.votes.all() 

你的代码是这样:

class Question(models.Model): 
    title = models.CharField(max_length=500, null=False) 
    content = models.TextField(max_length=10000, null=False) 
    author = models.ForeignKey('UserEdus', null=False) 
    solution_found = models.BooleanField(default=False, null=False) 
    points = models.IntegerField(default=1, null=False) 
    post_date = models.DateField(default=date.today) 

class UserEdus(models.Model): 
    user = models.OneToOneField(User, on_delete=models.SET_NULL, null=True) 
    bio = models.TextField(max_length=400, help_text="Enter your bio details here.") 
    votes = models.ManyToManyField(Question, related_name="votes") 

您的upvoteview将如下所示:

def upvote(request,pk): 
    question = get_object_or_404(Question, pk=pk) 
    question.points += 1 
    question.save() 
    useredus = UserEdus.objects.get(user__username=request.user.username) 
    useredus.votes.add(question) 
    useredus.save() 

我希望有帮助!

1
request.user.useredus.votes = question 

这是正确的做法

+0

我不明白。 UserEdus是一个类,外键是类Question? –

+0

只删除引号 –

+0

没有工作。引号是将外键设置为尚未定义的类。 –