Объект 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)
Вернуться на верх