Можно ли в одном цикле вывести данные из двух моделей, принадлежащих другой модели?
Есть главная модель User
, я её расширил, добавил 2 модели Profile
и Friends
. Могу ли я в одном цикле вывести данные из Profile
и Friends
, принадлежащие User
?
models.py:
class Sitylist(models.Model):
idsity = models.AutoField(primary_key=True)
sityname = models.TextField()
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
sitys = Sitylist.objects.all()
INTEGER_CHOICES= [(str(thing.sityname), str(thing.sityname)) for thing, things in zip(sitys, sitys)]
BLOOD_TYPES_CHOICES = [('В активном поиске', 'В активном поиске'),('Встречаюсь', 'Встречаюсь'),('Женат', 'Женат'),('Замужем', 'Замужем'),('Всё сложно', 'Всё сложно'),]
sity = models.CharField('sity', max_length=30,blank=True,choices=INTEGER_CHOICES)
birth_date = models.DateField(null=True, blank=True)
osebe = models.TextField(max_length=300, blank=True)
blood_type = models.CharField('Blood Type', max_length=40,blank=True,choices=BLOOD_TYPES_CHOICES)
class Friends(models.Model):
to_user = models.ForeignKey(User, models.CASCADE, related_name='friends',unique=False) # для пользователя
ot_user = models.ForeignKey(User, models.CASCADE, related_name='_unused_friend_relation',unique=False) # от пользователя
class Meta:
unique_together = ('to_user', 'ot_user',)
views.py:
def friends(request):
if request.user.is_authenticated:
if request.method == 'POST':
pass
else:
friends_list = Friends.objects.filter(to_user=request.user.id)
return render(request, 'board/friends.html', {'friends_list':friends_list})
else:
return redirect('login')
friends.html:
{% extends "board/base.html" %}
{% load static %}
{% block content %}
<div>
{% if user.is_authenticated %}
<div>
{% for friends in friends_list %}
<p>{{ friends.ot_user.first_name }} {{ friends.ot_user.last_name }}</p>
<p>{{ friends.user.sity }}</p> <!--не могу вывести поля из модели Profile-->
<p>{{ friends.user.osebe }}</p><!--принадлежащие User -->
{% endfor %}
</div>
{% endif %}
</div>
{% endblock %}
У меня выводит только вот эти 2 поля:
{{ friends.ot_user.first_name }} {{ friends.ot_user.last_name }}
из модели Друзья
, а к модели Profile
нету доступа, хотя эти 2 модели привязаны к User
.
Могу ли я как-то в цикле вывести каждого друга с всеми полями Profile
(osebe sity)? Я запутался в выводе данных.
я изменил код во views.py теперь в консоли выводятся все нужные данные имя фамилия город я не могу разобрать как переменную friends_profil из цикла for объединить в 1 QuerySet
def friends(request):
if request.user.is_authenticated:
if request.method == 'POST':
pass
else:
obj_user = Friends.objects.filter(to_user=request.user.id)
for list_user_friends in obj_user:
obj_profil = Profile.objects.get(user=list_user_friends.ot_user.id)
friends_profil = (obj_profil.user.last_name,obj_profil.user.first_name,obj_profil.sity)
return render(request, 'board/friends.html', {})
else:
return redirect('login')
это вывод из консоли
print(type(obj_profil))
<class 'board.models.Profile'>
<class 'board.models.Profile'>
<class 'board.models.Profile'>
<class 'board.models.Profile'>
Источник: Stack Overflow на русском