2017-07-17 82 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

沒有工作。引號是將外鍵設置爲尚未定義的類。 –