#django #django-models #django-filter
Вопрос:
Я пытаюсь применить фильтр выбора, однако это выглядит так, как если бы поле, о котором я говорю, не было восстановлено там, где оно существует :
Набор представлений моделей :
class StartUpViewSet(NestedViewSetMixin, ModelViewSet): """ Class that provides List, Retrieve, Create, Update, Partial Update and Destroy actions for startups. It also include a filter by startup status """ model = Startup queryset = Startup.objects.all() serializer_class = StartupSerializer filter_backends = (filters.DjangoFilterBackend,) filterset_fields = 'status'
Класс фильтров :
class StartupFilter(filters.FilterSet): status = filters.ChoiceFilter(choices=START_UP_STATUS) class Meta: model = Startup fields = ['status']
И модель :
class Startup(models.Model): header = models.CharField("Header", max_length=255) title = models.CharField("Title", max_length=255) description = models.CharField("description", max_length=255) # TODO Change this to options instead of array tags = ArrayField(models.CharField(max_length=10, blank=True), size=5) # TODO Images to be stored in aws only url will be in DB card_image = models.ImageField(upload_to='media/images/cards') logo_image = models.ImageField(upload_to='media/images/logos') main_img = models.ImageField(upload_to='media/images/main', null=True) createdAt = models.DateTimeField("Created At", auto_now_add=True) status = models.IntegerField(choices=START_UP_STATUS, default=1) def __str__(self): return self.title
Ошибка :
'Meta.fields' must not contain non-model field names: s, t, a, u
Комментарии:
1.
filterset_fields = ['status']
2. Спасибо и извините за мое медленное понимание, действительно, статус-это список!
Ответ №1:
Как filtered_fields
следует из названия, он ожидает набор полей, а не одно поле. Таким образом, вы должны реализовать это как список, кортеж, набор или любую другую коллекцию строк, а не как одну строку:
class StartUpViewSet(NestedViewSetMixin, ModelViewSet): # … filterset_fields = ('status',)
Если вы хотите указать пользовательский FilterSet
, вы передаете ссылку на класс с:
class StartUpViewSet(NestedViewSetMixin, ModelViewSet): # no filterset_fields filterset_class = StartupFilter