Я пытаюсь использовать фильтры с моделью Wagtail Page и моделью Orderable.Но теперь я получаю дубликаты в моем фильтре.Как я могу решить что-то вроде этого?
Мой код:
class FieldPosition(Orderable):
page = ParentalKey('PlayerDetailPage', on_delete=models.CASCADE, related_name='field_position_relationship')
field_position = models.CharField(max_length=3, choices=FIELD_POSITION_CHOICES, null=True)
panels = [
FieldPanel('field_position')
]
def __str__(self):
return self.get_field_position_display()
class PlayerDetailPage(Page):
content_panels = Page.content_panels + [
InlinePanel('field_position_relationship', label="Field position", max_num=3),
]
class PlayerDetailPageFilter(FilterSet):
field_position_relationship = filters.ModelChoiceFilter(queryset=FieldPosition.objects.all())
class Meta:
model = PlayerDetailPage
fields = []
Так что я пытаюсь сделать, это создать фильтр, который использует записи из FIELD_POSITION_CHOICES
для фильтрации любой страницыэта позиция объявлена на встроенной панели в Wagtail.
Как вы можете видеть на картинке внизу, фильтры просматриваются и страница отображается.(Это 2 страницы со списком из 3 позиций на местах).
Таким образом, на странице 1 и странице 2 есть запись "Left Winger", поэтому в раскрывающемся списке она равна двойной.Фильтрация работает отлично.
Что я могу сделать, чтобы предотвратить это?
Решение должно быть примерно таким (Кредиты для Харриса для этого):
У меня в основном есть один FieldPosition
объект на позицию поля страницы, поэтому он перечисляет все объекты правильно.Я подозреваю, что я не должен использовать там средство выбора модели, а список жестко закодированных значений в FIELD_POSITION_CHOICES
и затем фильтр для выполнения запроса, который выглядит примерно как PlayerDetailPage.objects.filter(field_position_relationship__field_position=str_field_position_choice)
.Но как это сделать с помощью фильтра Джанго?