Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/24.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
Python Django:OneToOneField-RelatedObjectsDoesNoTexist_Python_Django_One To One - Fatal编程技术网

Python Django:OneToOneField-RelatedObjectsDoesNoTexist

Python Django:OneToOneField-RelatedObjectsDoesNoTexist,python,django,one-to-one,Python,Django,One To One,我的模型中有以下两个类: class Answer(models.Model): answer = models.CharField(max_length=300) question = models.ForeignKey('Question', on_delete=models.CASCADE) def __str__(self): return "{0}, view: {1}".format(self.answer, self.answer_numb

我的模型中有以下两个类:

class Answer(models.Model):
    answer = models.CharField(max_length=300)
    question = models.ForeignKey('Question', on_delete=models.CASCADE)

    def __str__(self):
        return "{0}, view: {1}".format(self.answer, self.answer_number)


class Vote(models.Model):
    answer = models.OneToOneField(Answer, related_name="votes", on_delete=models.CASCADE)
    users = models.ManyToManyField(User)

    def __str__(self):
        return str(self.answer.answer)[:30]
在shell中,我给出了第一个答案:

>>> Answer.objects.all()[0]
<Answer: choix 1 , view: 0>
>Answer.objects.all()[0]
我想得到投票对象:

>>> Answer.objects.all()[0].votes
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "C:\Users\Hippolyte\AppData\Roaming\Python\Python38\site-packages\django\db\models\fields\related_descriptors.py", line 420, in __get__
    raise self.RelatedObjectDoesNotExist(
questions.models.Answer.votes.RelatedObjectDoesNotExist: Answer has no votes.
>Answer.objects.all()[0]。投票
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
文件“C:\Users\Hippolyte\AppData\Roaming\Python38\site packages\django\db\models\fields\related\u descriptors.py”,第420行,在__
提出与自我相关的对象不符合条件(
问题。模型。答案。投票。相关对象没有投票权。
但是发生了一个错误


我不明白为什么
相关的\u名称
无法识别。你能帮我吗?

你在这里使用了
OneToOneField
。这意味着每个
投票
指向不同的
一个wer
对象。因此,每个
答案
最多有一个
投票
。一个类似
部分答案的查询。投票
>将立即查询该
投票
对象,如果该对象不存在,它将引发
relatedObjectsDoesNotExist
错误(这是
ObjectsDoesNotExist
异常的子类)。因此可以识别
相关的\u名称
本身,但没有相关的
投票
对象


然而,在这里使用一个
OneToOneField
是令人惊讶的。这意味着每次投票都指向一个唯一的
答案
?我想你可能想在这里使用一个
外键
,否则一个
相关的
名字就没有多大意义了。

你在这里使用了一个
OneToOneField
。这意味着
Vote
指向一个不同的
Anwer
对象。因此,每个
Anwer
答案至多有一个
Vote
对象。类似
some\u Response的查询。votes
将立即查询该
Vote
对象,如果该对象不存在,它将引发
RelatedObjectsDoesNotextist
错误(它是
ObjectDoesNotExist
exception的子类)。因此可以识别
相关的\u名称
本身,但没有相关的
投票
对象


然而,在这里使用一个
OneToOneField
是令人惊讶的。这意味着每次投票都指向一个唯一的
答案
?我想你可能想在这里使用一个
外键
,因为否则一个
相关的名称
就没有多大意义了。

通过查询t来检查你的
答案
是否有
投票权
他在不使用OneToOne关系的情况下投票

试着做:

ans = Answer.objects.all()[0]
Vote.objects.filter(answer_id = ans.id).all()

额外提示,你应该在相关的名字上使用单数词(
投票
而不是
投票
),因为它是一个OneToOne,意思是一个答案只能有一票(反之亦然)

通过查询
投票
模型而不使用OneToOne关系来检查你的
答案
是否有
投票

试着做:

ans = Answer.objects.all()[0]
Vote.objects.filter(answer_id = ans.id).all()

额外提示,您应该在相关名称上使用单数词(
投票
,而不是
投票
),因为它是一个一卡通,意味着答案只能进行一票表决(反之亦然)

您的
相关名称
被识别,但它仅在相关对象存在时才被分配给实例

在您的情况下,数据库中没有
投票
实例,其
答案
字段指向您的
答案
实例

如果要继续,只需捕获异常并返回
None

answer = Answer.objects.all().first()
try:
   vote = answer.votes
except Answer._meta.model.related_field.RelatedObjectDoesNotExist as e:
   vote = None
如果您想缩短此时间,可以使用hasattr(回答“投票”)进行检查,但这将掩盖数据库查找过程中出现的所有异常(如果有)

answer = Answer.objects.all().first()
vote = answer.votes if hasattr(answer, 'votes') else None

请注意,由于您使用了OneToOneField,
答案。如果相关的
投票
存在,则投票将始终返回单个实例。因此,使用
相关的\u name='Vote'
更合适(不带s)

可以识别您的
相关\u名称
,但仅当相关对象存在时,才会将其分配给实例

在您的情况下,数据库中没有
投票
实例,其
答案
字段指向您的
答案
实例

如果要继续,只需捕获异常并返回
None

answer = Answer.objects.all().first()
try:
   vote = answer.votes
except Answer._meta.model.related_field.RelatedObjectDoesNotExist as e:
   vote = None
如果您想缩短此时间,可以使用hasattr(回答“投票”)
进行检查,但这将掩盖数据库查找过程中出现的所有异常(如果有)

answer = Answer.objects.all().first()
vote = answer.votes if hasattr(answer, 'votes') else None

请注意,由于您使用了OneToOneField,
答案。如果相关的
投票
存在,则投票将始终返回单个实例。因此,使用
相关的\u name='Vote'
更合适(不带s)

您在这里使用了一个
OneToOneField
?这意味着每个
投票
指向不同的答案?然后每个
答案最多有一个
投票
,因此
一些答案。投票
将即时查询
投票
对象,如果它不存在,它将引发一个
doesnotestists错误。您在此处使用了一个
OneToOneField
?这意味着每个
投票
指向不同的答案?因此,每个
答案
最多有一个
投票
,因此
一些答案。投票
将即时查询
投票
对象,如果该对象不存在,它将引发一个
问题Otexts
错误。