Ваш related_name
распознается, но назначается экземпляру, только если связанный объект существует.
В вашем случае в вашей базе данных нет экземпляра Vote
, где его поле answer
указывает на ваш Answer
экземпляр
Просто перехватите исключение и верните None
, если вы хочу продолжить:
answer = Answer.objects.all().first()
try:
vote = answer.votes
except Answer._meta.model.related_field.RelatedObjectDoesNotExist as e:
vote = None
Если вы хотите сократить это, вы можете использовать hasattr(answer, 'vote')
, чтобы проверить, но это замаскирует ВСЕ исключения, возникающие из поиска БД, если таковые имеются
answer = Answer.objects.all().first()
vote = answer.votes if hasattr(answer, 'votes') else None
Обратите внимание, что поскольку вы использовали OneToOneField, answer.votes
всегда будет возвращать один экземпляр, если существует связанный Vote
. Таким образом, было бы более целесообразно использовать related_name='vote'
(без s)