Использование inlineformset_factory приводит к получению неверных id из внешнего ключа

Я пытаюсь использовать inlineformset_factory для генерации серии числовых полей в таблице для обновления дополнительного поля в сквозной таблице из самореферентного отношения "многие-ко-многим".

views.py

def edit_assembly(request, slug):
    root = Part.objects.get(slug=slug)
    forms = inlineformset_factory(Part, Relationship, fields=('qty',), fk_name="child", can_delete=False)
    
    if request.method == 'POST': 
        formset = forms(request.POST)
        if formset.is_valid():
            formset.save()              
    else:
        formset = forms(instance=root)

    return render(request, "app/edit_assembly.html", {
        "formset": formset
    })

models.py

class Part(models.Model):
    part_number = models.IntegerField()
    slug = models.SlugField(unique=True)
    name = models.CharField(max_length=40)
    children = models.ManyToManyField(
        'self', symmetrical=False, through='Relationship', through_fields=('parent', 'child'), blank=True)

class Relationship(models.Model):
    qty = models.IntegerField(default=1)
    parent = models.ForeignKey(
        Part, on_delete=models.CASCADE, related_name='parent', null=True)
    child = models.ForeignKey(
        Part, on_delete=models.CASCADE, related_name='child', null=True)

template:

<form method="post">
    {% csrf_token %}
    {{ formset.management_form }}
    {% for form in formset %}
    {{ form }} <br> 
    {% endfor %}
    <input type="submit" value="Submit">
</form>

Что бы я ни пробовал, я не могу вернуть корректную форму. Когда я смотрю на источник страницы с помощью браузера, ID, которые назначены скрытым полям в каждой форме, не такие, как я ожидал. В настоящее время я сталкиваюсь с ошибкой: "(Дочернее скрытое поле) Встроенное значение не соответствует родительскому экземпляру."

Я подозреваю, что дочернее скрытое поле должно содержать внешний ключ для части, однако, похоже, что это не так.

Все еще не уверен, что именно не работает, но мне удалось довольно просто сделать то, что я хотел с помощью modelformset_factory вместо этого:

def edit_assembly(request, slug):
    root = Part.objects.get(slug=slug)

    AssemblyFormset = modelformset_factory(Relationship, fields=('qty',), extra=0) 
    
    if request.method == 'POST': 

        formset = AssemblyFormset(request.POST, queryset=root.parent.all())
        if formset.is_valid():
            formset.save()
                
    else:
        formset = AssemblyFormset(queryset=root.parent.all())

    return render(request, "PaNDa/edit_assembly.html", {
        "formset": formset
    })
Вернуться на верх