Доступ к собственности, поступающей из многих областей - PullRequest
0 голосов
/ 05 мая 2020

Это мой models.py:

class Role(models.Model):
    type= models.CharField(max_length=30)

class Profile(models.Model):
    role = models.ManyToManyField(Role, blank=True)

    def is_composer(self):
        return self.role['Composer']

Это мой view.py:

from .models import Profile, Role
def profiles_filtered(request, type):
    model = Profile
    if type == 'composers':
        queryset = Profile.objects.filter(is_composer = True)

My urls.py:

urlpatterns = [
    path('profiles/<str:type>/', views.profiles_filtered, name="profiles"),
]

И мой шаблон:

<li><a href="{% url 'profiles' 'composers' %}"> Composers</a></li>

Когда я нажимаю на ссылку, я попадаю на /profiles/composers/, в котором должны быть перечислены все профили, содержащие роль «Composer». Я получаю

FieldError at /profiles/composers/
Cannot resolve keyword 'is_composer' into field.

Тип Role содержит много ролей, одна из которых - «Composer». Как я могу перечислить только профили, которые содержат роль «Composer»?

дополнение

Если я использую

    if type == 'composers':
        queryset = Profile.objects.filter(role == 'Composer')

, я получаю

NameError at /profiles/composers/
name 'role' is not defined

1 Ответ

1 голос
/ 05 мая 2020

Если вы запрашиваете фильтр, где role равно Composer, тогда:

if type == 'composers':
    queryset = Profile.objects.filter(role__type__contains="Composer")

type является свойством объекта role, поэтому role__type эквивалентно тип роли и __contains - это django процесс фильтрации, скажем.

...