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
错误。