Выбор фильтра Django Фильтр не распознает существующее поле

#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