Django - Список объектов внутри списка объектов

Я использую Django для вывода списка номеров тюбиков с прикрепленными к ним ингредиентами. При нажатии на номер тюбика отображается список всех ингредиентов. Затем, если я нажимаю на ингредиент, я хочу, чтобы он заменил сохраненный ингредиент для этого тюбика. Но я не знаю, как поступить, нужно ли мне сделать подприложение для ингредиентов в моем приложении для тюбиков, или есть способ сохранить идентификатор тюбика.

Я пробовал много вещей, вот мои фактические взгляды :

def tube_view(request):
    tubes = Tube.objects.all()
    return render(request, 'tube_ing.html', {'tubes': tubes})

def tube_detail_view(request, my_id):
    obj = get_object_or_404(Tube, id=my_id)
    request.session['my_id'] = my_id
    ings = Ing.objects.all()
    return render(request, "tube_detail.html", {"obj": obj, "ings": ings)

def tube_choice(request, id_ing):
    obj = get_object_or_404(Ing, id=id_ing)
    request.session['id_ing'] = id_ing
    data = {'qty': 100}
    form = TubeForm(data)
    return render(request, "tube_choice.html", {"obj": obj, 'form': form})

def tube_form(request):
    if request.method == 'POST':
        form = TubeForm(request.POST)
        if form.is_valid():
            id_ing = request.session['id_ing']
            form.cleaned_data['name_ing'] = my_id
            t = Tube(name_ing_tube=name_ing_ing)
            t.save()
        else:
        return HttpResponseRedirect('/tube_ing/')
    else:
    return HttpResponseRedirect('/tube_ing/')

Мои модели :

class Tube(models.Model):
    tube_number = models.IntegerField()
    name_ing = models.CharField(null=False, blank=True, max_length=255, default='')
    qty = models.IntegerField(default=0)

def get_absolute_url(self):
    return reverse('tube_ing:tube_detail', kwargs={"my_id": self.id})


class Ing(models.Model):
    name_ing = models.CharField(null=False, blank=True, max_length=255, default='')

    def get_absolute_url(self):
        return reverse('tube_ing:tube_choice', kwargs={"id_ing": self.id})

И мои шаблоны url :

path('', views.tube_view, name='tube_view'),
path('<int:my_id>/', views.tube_detail_view, name='tube_detail'),
path('ing/<int:id_ing>/', views.tube_choice, name='tube_choice'),
path('ing/tube_form/', views.tube_form, name='tube_form')

Поэтому я не знаю, что писать в форме и как действовать, чтобы сохранить информацию о трубке. Большое спасибо тем, кто найдет время, чтобы помочь мне в этом.

если [есть] способ сохранить идентификатор трубки[?]

Да, в вашей функции tube_form попробуйте обратиться к request.session['my_id'], идентификатор трубки был установлен из tube_detail_view.

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