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.