Прикрепление, отображение и отправка форм к каждому идентификатору товара, отображаемому в цикле for (Django)
Я хочу интегрировать форму для каждого продукта, включенную в цикл.
Каждая форма независима от других: если одна форма отправлена, другие не нужны.
В настоящее время форма не проверяется. Я думаю, это потому, что мне не удалось прикрепить форму к конкретному идентификатору товара, и я не уверен, как это сделать.
При применении формы к определенному Id на одной странице, я бы просто продолжил def function(request, product_id).
В данном случае это не вариант, поскольку я отображаю несколько товаров на одной странице.
models.py
class ReviewRating(models.Model):
user = models.ForeignKey(User,blank=True, on_delete=models.CASCADE, related_name="usercomments")
product=models.ForeignKey(Product,related_name="comments", on_delete=models.CASCADE)
review =models.TextField(max_length=250, blank=True)
rating =models.IntegerField(choices=RATING, default=0)
forms.py
class ReviewForm(forms.ModelForm):
venue = forms.ModelChoiceField(queryset = Venue.objects.all(),required=False)
class Meta:
model = ReviewRating
fields = ['review', 'rating','venue']
widgets = {
'venue': forms.TextInput(attrs={'class':'form-select', 'placeholder':'Enter name'}),
}
views.py
def show_event(request, event_id):
submitted = False
form = ''
form = 'ReviewForm'
if request.method =="POST":
form = ReviewForm(request.POST)
if form .is_valid():
data = form .save(commit=False)
data.product_id = product_id #<-- How do I define product_id?
data.user_id = request.user.id
data.save()
else :
print(form .errors)
else:
form = ReviewForm()
event = Event.objects.get(pk=event_id)
categories = Product.objects.filter(event=event_id)
menu = event.product.filter(event=event_id)
return render(request, 'main/show_event.html',{'event':event, 'categories':categories,'menu':menu,'form':form,'submitted':submitted})
шаблон
{% if not event.product.all %}
No products have been selected for this event.
{% else %}
{% regroup categories by category_menu as category_menu_list %}
{% for category_menu in category_menu_list %}
{{category_menu.grouper}}
{% for product in category_menu.list %}
<div class="form-group">
<form method="POST">
{% csrf_token %}
{{ form|as_crispy_errors }}
{{ form.rating|as_crispy_field }}
<input type="Submit" class="btn btn-secondary">Add Review</input >
</form>
</div>
{%endfor%}
{%endfor%}
{%endif%}