AttributeError
Ошибка возникает из-за того, что отношение Mycheque.related
равно NULLable: его можно установить равным NULL
.
Это означает, что для некоторых Mycheque
s, объект self.related
будет None
, и поэтому self.related.relation
выдаст ошибку.
Таким образом, вы добавите некоторую логику в __str__
для обработки этого случая, например:
def __str__(self):
if <b>self.related</b>:
return self.related.relation.username.title()
else:
return 'no related!'
При этом я нахожу функцию __str__
довольно "странной": текстовое представление Mycheque
учитывает только объект related.relation
?Так что вам стоит подумать об изменении этого.
Один и тот же "сканарио" может происходить в нескольких местах, поэтому вам следует запустить поиск и исправить его соответствующим образом
Singns
не существует
Это, вероятно, из-за строки:
user_data = Signs.objects.get(relation_id=userdata.id)
Странно то, что вы вообще ничего не делаете с переменной user_data
, поэтому - если вы правильно реализовали представление - можете удалить строку.
При этом сама строка не имеет смысла: вы запрашиваете ForeignKey
в обратном порядке, это означает, что для объекта User
может быть ноль, один или несколько объектов Signs
.Поэтому имеет смысл использовать .filter(..)
, поскольку, если нет связанных Signs
(или нескольких), этот запрос выдаст ошибку.
Рефакторинг представления и введение ModelForm
Строка выше:
userdata = User.objects.get(username = request.user)
также не имеет смысла: request.user
- это a User
объект, поэтому он эквивалентен:
userdata = request.user
Другие особенности в представлении заключаются в том, что вы выполняете аутентификацию самостоятельно, вместо использования @login_required
[Django-doc] , и, кроме того, здесь определенно имеет смысл определить ModelForm
[Django-doc] , с помощью формы вид, вероятно, будет уменьшен до 5-7 строк, а ошибки будут обработаны в правильном месте.