Флажок ВСЕГДА возвращает False / нет в request.POST - Django

У меня есть флажок в моем приложении django, где пользователь может добавить или удалить объявление из своего списка просмотра.

Однако, этот флажок всегда возвращает False, и никогда не находится в request.POST, я пробовал так много решений из SO и по всему интернету в течение буквально нескольких дней и не могу понять это

Models.py

class Watchlists(models.Model):
    user = models.CharField(max_length=64, default='user')
    title = models.CharField(max_length=64, blank=True)
    watchlist = models.BooleanField(default=False, blank=False)

    def __str__(self):
        return f"{self.title}, {self.user}, {self.watchlist}"

Forms.py

class CheckForm(ModelForm):
    watchlist = forms.BooleanField(required=False)
    # watchlist = forms.DecimalField(widget=forms.CheckboxInput(attrs={"value":"watchlist"}))
    class Meta:
        model = Watchlists
        fields = ['watchlist']

У чекбокса не было значения, поэтому я подумал, что проблема в этом и попытался дать ему значение здесь, в закомментированной строке, но это не помогло

Views.py

    watchlist = CheckForm(request.POST or None)
      if request.method == 'POST':
        # if request.POST['watchlist']:
        # if 'watchlist' in request.POST:
        # if request.POST.get('watchlist', False):
        if request.POST.get('watchlist', '') == 'on':
            if watchlist.is_valid():
                check = watchlist.cleaned_data['watchlist']
                watchlist_data = Watchlists.objects.all().filter(title=title, user=username).first()

                if not watchlist_data:
                    watchlisted = Watchlists.objects.create(title=title, user=username, watchlist='True')
                    watchlisted.save()
                if watchlist_data:
                    watchlist_data.delete()

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

Шаблон

            <form action="listing" method="POST">
                {% csrf_token %}
                {{ checkbox }}
            </form>

У него есть атрибуты name и id, label тоже подходит

Во-первых, вам не нужно добавлять blank=False в поле watchlist, поскольку вы задали ему значение по умолчанию, поэтому перепишите его так

watchlist = models.BooleanField(default=False)

Сделав это, вы также сможете удалить это из вашего forms.py. В этом нет необходимости

watchlist = forms.BooleanField(required=False)

Просто используйте следующим образом

class CheckForm(ModelForm):
    class Meta:
        model = Watchlists
        fields = ['watchlist']
Дополнительные вещи, которые нужно исправить на основе комментария @Sunderam Dubey

В вашей HTML-форме измените action="listing" на action="{% url 'listing' %}"

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