Объект Django Many to Many 'QuerySet' не имеет атрибута 'members'
Во-первых, вот моя модель Location. В ней есть одно поле ManyToManyField под названием members.
Модель:
class Location(models.Model):
name = models.CharField(max_length=200)
# ...
members = models.ManyToManyField(User, related_name="members")
# ...
(Примечание, "# ..." заменяет большее количество полей)
А затем в представлении я сделал следующее.
DetailView
class LocationDetailView(DetailView):
model = Location
context_object_name = "location"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
location = Location.objects.filter(pk=self.get_object().pk)
context["members"] = location.members.all()
return context
Ошибка
'QuerySet' object has no attribute 'members'
Ваш location - это не объект Location, а QuerySet, который содержит один объект Location. Извлечение этого объекта не обязательно, вы можете работать с:
class LocationDetailView(DetailView):
model = Location
context_object_name = 'location'
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context['members'] = self.object.members.all()
return context
Но на самом деле вам не нужно передавать members в контекст: в шаблоне вы можете работать с:
{% for member in location.members.all %}
…
{% endfor %}
Я нашел ошибку, это
location = Location.objects.get(pk=self.get_object().pk)
и не
location = Location.objects.filter(pk=self.get_object().pk)