Как убрать "это поле не является обязательным" в django?

Я нашел сообщения с похожей проблемой, но решения, похоже, не работают со мной. Или, возможно, я что-то упускаю.

Я создал форму в Django, но по умолчанию кажется, что каждое обязательное поле имеет надпись "Это поле обязательно".

В идеале, я бы хотел, чтобы это происходило только тогда, когда кто-то пытается отправить форму, а поле отсутствует.

form.py

class ElderFlowerChampFormAdmin(ModelForm):
    fieldsets=[
            ("Look",{'fields':[
            ('look_colour','look_clarity','look_effervescence')]}),
        }

        widgets = {
                    'user': forms.Select(attrs={'class':'form-control','required':'True'}),
                    'look_colour':forms.Select(attrs={'class':'form-control','required':'True'}),

                }

view.py

def elderflowerchamp(request, product_id):
    global ChampageRating
    product = Product.objects.get(pk=product_id)
    url = request.META.get('HTTP_REFERER')
    submitted = False
    try:
        if request.method == "POST":
            reviews = ChampageRating.objects.get(pk=product_id)
            if request.user.is_superuser:
                form = ElderFlowerChampFormAdmin(request.POST, instance=reviews)
                if form.is_valid():
                        form.save()
                        return redirect('home')
            else:
                form = ElderFlowerChampForm(request.POST, instance=reviews)
                if form.is_valid():
                    ChampageRating = form.save(commit=False)
                    ChampageRating.user = request.user
                    ChampageRating.save()
                    return redirect('home')
        else:
            #This part goes to the page, but doesnt submit
            reviews = ChampageRating.objects.get(pk=product_id)
            if request.user.is_superuser:
                form = ElderFlowerChampFormAdmin
            else:
                form = ElderFlowerChampForm
            if 'submitted' in request.GET:
                submitted = True
    except:
        reviews = None
        if request.user.is_superuser:
            form = ElderFlowerChampFormAdmin(request.POST)
            if form.is_valid():
                    data = ChampageRating()
                    data.rating = form.cleaned_data['rating']
                    data.look_colour = form.cleaned_data['look_colour']
                    data.ip = request.META.get('REMOTE_ADDR')
                    data.product_id = product_id
                    data.user_id = request.user.id
                    data.save()
                    messages.success(request, 'Thank you! Your review has been submitted.')
                    return redirect('home')
        else:
            form = ElderFlowerChampForm(request.POST)
            if form.is_valid():
                    data = ChampageRating()
                    data.rating = form.cleaned_data['rating']
                    data.look_colour = form.cleaned_data['look_colour']
                    data.ip = request.META.get('REMOTE_ADDR')
                    data.product_id = product_id
                    data.user_id = request.user.id
                    data.save()
                    messages.success(request, 'Thank you! Your review has been submitted.')
                    return redirect('home')


    return render(request,"main/ElderFlowerReview.html", {'form':form, 'submitted':submitted,'reviews':reviews, 'product':product})

models.py

LOOKCOLOUR=(
    (1,'Straw'),
    (2,'Yellow'),
    (3,'Gold'),
    (4,'Amber'),
)

class ChampageRating(models.Model):
    user = models.ForeignKey(User,blank=True, on_delete=models.CASCADE)
    product=models.ForeignKey(Product,related_name="champcomments", on_delete=models.CASCADE)
    look_colour=models.IntegerField(choices=LOOKCOLOUR, default=0)
   
    def __str__(self):
        return '%s - %s - %s'%(self.user, self.product, self.date_added)

Любые идеиenter image description here

что-то не так в деле request.GET здесь:

    if request.user.is_superuser:
        form = ElderFlowerChampFormAdmin
    else:
        form = ElderFlowerChampForm

Вы отправляете FormClass в контекст шаблона, а не в экземпляр формы.

Также вижу ошибку в исключительном случае: Если у меня есть GET, я не должен выводить BoundedForm, здесь должно быть form.bounded = false (форма не ограничена никакими данными). Но вы всегда делаете BoundedForm, с данными request.POST после ошибки здесь:

reviews = ChampageRating.objects.get(pk=product_id)

Мое мнение - вам стоит попробовать почитать о Django-GCBV, это лучший способ избежать сложных ошибок, как в вашем вопросе.

https://docs.djangoproject.com/en/4.0/topics/class-based-views/

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