Django: Как фильтровать модель с помощью условия "where" для отображения в списке связанных с администратором объектов

У меня есть 2 модели, которые зависят друг от друга. Одна из них - модель FeatureFilm, а другая - модель CompanyInvolved. В таблице FeatureFilm я хочу хранить фильмы, а в таблице CompanyInvolved я хочу хранить множество компаний, которые участвовали в создании фильма. Модель CompanyInvolved привязана к таблице FeatureFilm с помощью внешнего ключа. Я хочу отобразить столбец из таблицы CompanyInvolved в представлении списка в панели администратора FeatureFilm. Я уже сделал это с помощью своего кода. Единственное, что у меня пока не получилось, это фильтр, который фильтрует таблицу CompanyInvolved по полю company_role. Я хочу показать только те значения, которые имеют company_role = "Produktion". Ах да, я хочу показать только первую производственную компанию, остальные строки не играют роли в представлении таблицы списка. много приветствий Может кто-нибудь помочь? много приветствий

вот мой код зависимости:

model.py

company_role = [
    ("Produktion", "Produktion"),
    ("Co-Produktion", "Co-Produktion"),
    ("Kinoverleih", "Kinoverleih"),
    ("Sender", "Sender"),
    ("Weltvertrieb", "Weltvertrieb"),
]

class ProjectBaseModel(models.Model):
    title = models.CharField("Titel", max_length=100, blank=False,
    unique=True)

    leading_postproduction_id = models.ForeignKey(
        Company,
        verbose_name="Federführende Postproduktion",
        on_delete=models.SET_NULL,
        blank=True,
        null=True,
    )



class FeatureFilm(ProjectBaseModel):
    class Meta:
        verbose_name = "Kinofilm"



class CompanyInvolved(models.Model):
    feature_id = models.ForeignKey(
       FeatureFilm,
       on_delete=models.CASCADE,
       null=True,
       blank=True,
    )
    tv_movie_id = models.ForeignKey(
        TvMovie, on_delete=models.CASCADE, null=True, blank=True
    )
    company_role = models.CharField(
       choices=company_role,
       max_length=15,
       blank=True,
       help_text="Produktion, Co-Produktion, Kinoverleiher, Sender,
       Weltvertrieb",
    )
    company_involved = models.ForeignKey(
        Company,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
    )

    def __str__(self):
        return "#" + str(self.pk)

views.py

class FeatureListView(LoginRequiredMixin, PermissionRequiredMixin, ListView):
    permission_required = "project.can_access_featurefilm_list"
    model = FeatureFilm
    template_name = "project/feature-list.html"

    def handle_no_permission(self):
       return redirect("access-denied") 

admin.py --- вот код, который является моей проблемой****look to get_company_involved

@admin.register(FeatureFilm)
class FeatureFilmAdmin(admin.ModelAdmin):
    inlines = [
        SalesInfoSetInLine,
        ContentInfoSetInLine,
        CompanyInvolvedSetInLine,
    ]

    list_display = [
        "title",
        "get_company_involved",   
        "program_length_planned",
    ]

def get_company_involved(self, obj):
    productioncompany = (
        FeatureFilm.objects.filter(pk=obj.id)
        .values("companyinvolved__company_involved__name")
        .first()
    )
    return productioncompany["companyinvolved__company_involved__name"]

get_company_involved.short_description = "Produktion"

я пробовал больше раз и решил свой вопрос. вот решение, в get_production_involved вы можете увидеть правильный запрос

@admin.register(FeatureFilm)
class FeatureFilmAdmin(admin.ModelAdmin):
    inlines = [
        SalesInfoSetInLine,
        CompanyInvolvedSetInLine,
    ]

    list_display = [
        "title",
        "get_production_involved",
          ]

    def get_production_involved(self, obj):
        production_company = (
            FeatureFilm.objects.filter(
                pk=obj.id,
                companyinvolved__company_role="Produktion",
                companyinvolved__is_production_list=True,
            )
            .values_list("companyinvolved__company_involved__name")
            .first()
        )

        if production_company:
            return production_company
        else:
            production_company = (
                FeatureFilm.objects.filter(
                    pk=obj.id,
                    companyinvolved__company_role="Produktion",
                )
                .values_list("companyinvolved__company_involved__name")
                .first()
            )
            return production_company

    get_production_involved.short_description = "Produktion"
Вернуться на верх