Django Admin: Фильтрация Inline по ForeignKey связанному через родительскую модель

Я использую Django Admin с inline-формами для управления моделью CombinedCutting, которая связана с CombinedCuttingItem. CombinedCutting имеет ForeignKey на Assignment. CombinedCuttingItem имеет ForeignKey на OrderItem. Assignment также имеет ForeignKey на Order, а OrderItem связан с Order.

В inline-форме CombinedCuttingItem, при выборе Assignment для CombinedCutting, я хочу фильтровать доступные опции в поле order_item, показывая только те OrderItem, которые связаны с Order, связанным с выбранным Assignment.

class CombinedCuttingItemInline(admin.TabularInline):
    model = CombinedCuttingItem
    extra = 1

@admin.register(CombinedCutting)
class CombinedCuttingAdmin(admin.ModelAdmin):
    inlines = [CombinedCuttingItemInline]

class CombinedCutting(models.Model):
    assignment = models.ForeignKey(Assignment, on_delete=models.CASCADE, verbose_name="Задание")
    # ... другие поля

class CombinedCuttingItem(models.Model):
    combined_cutting = models.ForeignKey(CombinedCutting, on_delete=models.CASCADE, related_name="items")
    order_item = models.ForeignKey(OrderItem, on_delete=models.CASCADE, verbose_name="Позиция заказа")
    # ... другие поля

# Модели Assignment, Order и OrderItem (упрощенно)
class Assignment(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE, verbose_name='Заказ', null=True, blank=True)
    # ... поля

class Order(models.Model):
    # ... поля

class OrderItem(models.Model):
    order = models.ForeignKey(Order, on_delete=models.CASCADE)
    # ... поля


class CombinedCuttingItemInline(admin.TabularInline):
    model = CombinedCuttingItem
    extra = 1  # количество пустых строк для добавления

    def get_formset(self, request, obj=None, **kwargs):
        formset = super().get_formset(request, obj, **kwargs)
        if obj:
            # Получаем Order связанный с Assignment
            order = obj.assignment.order  # Доступ к Order через obj.assignment.order
            if order:  # Проверка на существование заказа
                order_items = OrderItem.objects.filter(order=order)  # Фильтруем по конкретному заказу
                kwargs["queryset"] = order_items
        return formset


@admin.register(CombinedCutting)
class CombinedCuttingAdmin(admin.ModelAdmin):
    inlines = [CombinedCuttingItemInline]

попытался через get_formset не получилось Как реализовать такую фильтрацию в Django Admin?

Вернуться на верх