Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 添加更多与外键的关联_Django_Python 3.x_Django Models_Foreign Keys - Fatal编程技术网

Django 添加更多与外键的关联

Django 添加更多与外键的关联,django,python-3.x,django-models,foreign-keys,Django,Python 3.x,Django Models,Foreign Keys,我有两种模式:Question和UserEdus UserEdus可以对问题进行投票 投票后,Question存储投票的相关useredu列表。我不知道如何创建和添加此关联 说Question可以有很多UserEdus思考这个问题的正确方法吗 这就是我目前所拥有的 class Question(models.Model): title = models.CharField(max_length=500, null=False) content = models.TextField(max_len

我有两种模式:
Question
UserEdus

UserEdus
可以对
问题进行投票

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

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”对象没有属性“voces\u set”

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

request.user.useredus.votes = question 

这是正确的方法

我认为您要查找的是相关的\u name参数和ManyToManyField模型字段。我会改变:

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

这样,您可以执行如下查询:

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")
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()
您的upvoteview看起来像:

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")
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()

我希望这有帮助

我不明白。UserEdus是一个类,外键属于类问题?不起作用。引号用于为尚未定义的类设置外键。request.user.Question.voces\u set.add('a')替换为此,并告诉我发生了什么情况“user”对象没有属性“Question”。request.user.useredus.voces=Question,这是确定的