Автоматическое заполнение поля формы - django

Я пытаюсь автоматически заполнить поле в форме, чтобы пользователь не вводил данные.

В данном случае пользователь начнет со страницы show_venue, на которой будет отображен ряд товаров.

Нажав на один из этих продуктов, пользователь перенаправляется на страницу продукта, где в форме можно оставить отзыв.

Форма требует от пользователя выбрать место, где проводился обзор.

Я хочу упростить это.

Поскольку пользователь уже пришел со страницы venue_id, я хотел бы автоматически заполнить это поле.

Я пробовал разные вещи, найденные на этом форуме, и оставил последнюю попытку, которая в настоящее время выдает следующее сообщение об ошибке: cannot unpack non-iterable NoneType object.

Небольшая причуда - вы заметите, что форма на самом деле сохраняется в функции show_venue, а не в функции show_product_from_venue (страница продукта). Это связано с процессом перенаправления, который я должен был реализовать: пользователь перенаправляется на предыдущую страницу venue_ID после отправки формы: сделал это с помощью javascript в шаблоне. Я не добавляю страницу шаблона, чтобы сохранить краткость вопроса, и не думаю, что это будет важно для моего вопроса.

просмотров

def show_venue(request, venue_id):          
    if request.method == "POST" and 'btnreview_form' in request.POST:
        form = CatalogueReviewForm(request.POST)
        data = form.save(commit=False)
        data.product_id = venue_id
        data.catalogue_id = venue_id
        data.venue_id = CatalogueReviewRating.objects.get(form.cleaned_data['venue']) #<-- this is where I am struggling
        data.user_id = request.user.id
        data.save()
        ven_id = request.POST.get('venue_id')
        if form.is_valid():
            print(data)
            form.save()
            return HttpResponseRedirect(ven_id)
    else:
        venue = Venue.objects.get(pk=venue_id)
        menu = Catalogue.objects.filter(venue=venue_id)
        categories = Catalogue.objects.filter(venue=venue_id).order_by('category_order')

return render(request, 'main/show_venue.html',{'venue':venue, 'menu':menu, 'categories':categories,'product':product,'venue_id':venue_id,'object':object})

def show_product_from_venue(request, catalogue_id):
    url = request.META.get('HTTP_REFERER')
    product = Catalogue.objects.get(pk=catalogue_id)
    form = CatalogueReviewForm()
    venue_form = VenueForm()
    submitted = False
    data = Catalogue.objects.filter(pk=catalogue_id).annotate(
            avg_rating =Avg('catalogue_comments__rating'),) 
    if request.method == "POST" and 'btnvenue_form' in request.POST:
        venue_form = VenueForm(request.POST)
        if venue_form.is_valid():
            venue_form.save()
            return HttpResponseRedirect(url)
        else:
            venue_form = VenueForm
            if 'submitted' in request.GET:
                submitted = True
    return render(request,"main/show_product_from_venue.html", {'form':form, 'submitted':submitted, 'product':product, 'venue_form':venue_form, 'data':data})

form

class CatalogueReviewForm(forms.ModelForm):
    venue = forms.ModelChoiceField(queryset = Venue.objects.all(),required=False)
    
    class Meta:
        model = CatalogueReviewRating
        fields = ['review', 'rating']

модель

class CatalogueReviewRating(models.Model):
    user = models.ForeignKey(User,blank=True,  on_delete=models.SET_NULL, null=True,related_name="catalogueusercomments")
    product=models.ForeignKey(Catalogue, related_name="catalogue_comments", on_delete=models.SET_NULL, null=True)
    venue = models.ForeignKey(Venue, blank=True, null=True, related_name="catalogue_venues", on_delete=models.SET_NULL)

url

path('show_venue/<venue_id>', views.show_venue,name="show-venue"),
path('show_product_from_venue/<catalogue_id>', views.show_product_from_venue,name="show-product-from-venue"),
Вернуться на верх