TypeError at / Поле 'id' ожидало число, но получило ... django
Привет всем программистам, я Django Developer, когда я запускаю свой сайт без учетной записи, сервер получил эту ошибку: TypeError at /
Field 'id' expected a number but got
Мой файл views.py имеет следующий вид:
def homepage(request):
if request.user.is_authenticated:
print("ok")
user = request.user
posts = Posts.objects.all()
sortedk = sorted(posts, key= lambda f: f.lan(), reverse=True)
comments = []
pictures = []
com = []
comments_pictures = []
for i in sortedk:
lst = []
id = i.id
poste = Comments.objects.filter(post_name_id = id)
com.append(poste)
num = len(poste)
prf = Profile.objects.get(id = i.writer_id)
pictures.append(prf.avator)
comments.append(num)
for comment in poste:
idh = comment.author_id
kk = Profile.objects.get(id = idh)
lst.append(kk.avator)
comments_pictures.append(lst)
print(comments_pictures)
if request.method == "POST":
form = CommentForms(request.POST)
if form.is_valid():
ns = form.save(commit=False)
ns.author = user
ns.post_name_id = int(request.POST.get("pk")[0])
ns.save()
return redirect('home:homepage')
else:
form = CommentForms()
cont = {
"user":user,
"posts":sortedk,
'comments':comments,
"pictures":pictures,
"pos":com,
"form":form,
"comment_pictures":comments_pictures,
}
return render(request, 'home/home.html',cont)
else:
return render(request, "home/home.html")
Пожалуйста, помогите мне в этом.
Как я могу это исправить? Есть ли какой-нибудь способ?
Ошибка, с которой вы столкнулись, скорее всего, связана с попыткой получить атрибут id из i.writer_id
, когда i.writer_id
является SimpleLazyObject
, представляющим объект AnonymousUser. Вам следует убедиться, что i.writer_id
не является AnonymousUser, прежде чем пытаться получить профиль с помощью Profile.objects.get(id=i.writer_id).
if hasattr(i.writer_id, 'id'):#or any method you want to verify i.writer_id
# Check if i.writer_id has an 'id' attribute
prf = Profile.objects.get(id=i.writer_id.id)
pictures.append(prf.avator)
else:
pictures.append(None) # Set a default value or handle accordingly