Django: Доступ к полной информации о пользователе через поле ManyToMany
Всем привет, я новичок в Django и работаю над своим первым большим проектом, и у меня возникли проблемы с доступом к информации модели Django User по умолчанию через отношения ManyToMany. Я потратил много времени на поиски и никак не могу разобраться с этим.
models.py
class Event(models.Model):
event_name = models.CharField(max_length=200, null=True, unique=True)
#etc...
class School(models.Model):
user = models.ManyToManyField(User)
event = models.ForeignKey(Event, null=True, on_delete=models.PROTECT)
#etc...
Мой url содержит id события, поэтому...
views.py
def schools(request, pk):
event = Event.objects.get(id=pk)
school = School.objects.filter(event=event)
return render(request, 'accounts/schools.html', {'event':event, 'school':school})
шаблон
{% for school in school %}
<tr>
<td>{{school.name}}</td>
<td>{{school.user.all}}</td>
{% endfor %}
В моем шаблоне я могу использовать {{school.user.all}}, чтобы получить Queryset, отображаемый с именем пользователя каждого пользователя, но мне нужны имя_и фамилия и фамилия, и я не могу понять, как это получить...
Спасибо за любые предложения. Я очень ценю ваше время!
Я смог добавить это к моей школьной модели, чтобы получить то, что я хотел:
def director(self):
test = ",".join([str(p) for p in self.user.all()])
user = User.objects.get(username=test)
return user.first_name + " " + user.last_name
СЛЕДУЕТ: если со "Школой" связано более одного пользователя, то отображается пусто
Вы должны включить пользователей в свой контекст.
Ниже я объясню, как вы можете отобразить пользователей одной школы в отношениях ManyToMany, поскольку это основная суть вашего вопроса. Я думаю, что вы можете сделать все остальное, если хотите отобразить всех пользователей всех школ на одной странице.
Функция просмотра:
school = School.objects.get(pk=1)
users = school.user.all()
Последняя строка функции просмотра:
return render(request, 'school_users.html', {'users': users})
А в вашем шаблоне:
{% for user in users %}
<tr>
<td>{{ user.first_name }}</td>
<td>{{ user.last_name }}</td>
</tr>
{% endfor %}
Вы не указали свою модель User, поэтому я предположил, что она имеет first_name
и last_name
атрибуты.