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?