Как отобразить идентификатор пользователя в django
У меня есть функция, в которой я должен, среди прочего, передать в шаблон идентификаторы пользователей, которые вели переписку, но я получаю ошибку в строке:
pk_list = messages.values('user_from__pk').distinct()
views.py:
def send_chat(request):
resp = {}
User = get_user_model()
if request.method == 'POST':
post =request.POST
u_from = UserModel.objects.get(id=post['user_from'])
u_to = UserModel.objects.get(id=post['user_to'])
messages = request.user.received.all()
pk_list = messages.values('user_from__pk').distinct()
correspondents = get_user_model().objects.filter(pk__in=list(pk_list))
insert = chatMessages(user_from=u_from,user_to=u_to,message=post['message'],correspondents=correspondents)
try:
insert.save()
resp['status'] = 'success'
except Exception as ex:
resp['status'] = 'failed'
resp['mesg'] = ex
else:
resp['status'] = 'failed'
return HttpResponse(json.dumps(resp), content_type="application/json")
models.py:
class chatMessages(models.Model):
user_from = models.ForeignKey(User,
on_delete=models.CASCADE,related_name="sent")
user_to = models.ForeignKey(User,
on_delete=models.CASCADE,related_name="received")
message = models.TextField()
date_created = models.DateTimeField(default=timezone.now)
correspondents = models.ForeignKey(User,
on_delete=models.CASCADE,related_name="correspondents", null=True)
def __str__(self):
return self.message
Ошибка:
TypeError: Field 'id' expected a number but got {'user_from__pk': 1}.
как я могу исправить эту ошибку?
проблема здесь:
pk_list = messages.values('user_from__pk').distinct()
queryset.values дает вам список словарей. в вашем случае [{'user_from__pk': pk1}, {'user_from__pk': pk2},... e.t.c.]
больше здесь: https://docs.djangoproject.com/en/4.1/ref/models/querysets/#values
А вам нужно values_list
.
pk_list = messages.values_list('user_from__pk', flat=True).distinct()
Чтобы избежать присоединения - вы можете сделать:
pk_list = messages.values_list('user_from_pk', flat=True).distinct()
больше здесь: https://docs.djangoproject.com/en/4.1/ref/models/querysets/#values-list