Skip to content

ModelChoiceFilter not working for custom field (not pk). #1714

@kaletvintsev

Description

@kaletvintsev

A always gat empty queryset for my filter. I printed sql request and see that it pass profession title instead slug. I don't know why and how can I fix int. Now I use CharFieltd to filter, but it has no error messages for invalid slugs.

Also if I use field_name="professions" it accept only integers.

Here is my code

from django.db import models
from model_utils.models import TimeStampedModel

from utils.validators import validate_telegram_url


class ChannelToSubscribe(TimeStampedModel):
    title = models.CharField(
        max_length=255,
    )

    channel_url = models.URLField(
        validators=[validate_telegram_url],
        unique=True,
    )

    professions = models.ManyToManyField(
        "common.Profession",
        db_index=True,
        related_name="channels_to_subscribe",
        blank=True,
    )

    def __str__(self):
        return f"{self.title}"
from django_filters import ModelChoiceFilter
from django_filters.rest_framework import FilterSet

from common.models import Profession
from subscriptions.models import ChannelToSubscribe


class ChannelToSubscribeFilter(FilterSet):
    profession_slug = ModelChoiceFilter(
        field_name="professions__slug",
        queryset=Profession.objects.filter(is_visible=True),
        to_field_name="slug",
        required=True,
    )

    class Meta:
        model = ChannelToSubscribe
        fields = (
            "profession_slug",
        )

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions