Django изменяет булево значение после POST

Я пытаюсь клонировать linkr.ee только для обучения

Страница выглядит следующим образом:

enter image description here

  • У каждого пользователя есть страница
  • На этой странице у одного пользователя может быть несколько ссылок
  • .
  • Ссылка может иметь поле пароля для разблокировки ссылки если пользователь установил пароль на True/False
  • .

Я создал модель здесь:

class Field(models.Model):
    user = models.ForeignKey(
        settings.AUTH_USER_MODEL,
        default=None,
        null=True,
        on_delete=models.CASCADE,
    )
    title = models.CharField(max_length=255)
    url = models.CharField(max_length=255)
    creator_adress = models.GenericIPAddressField(null=True)
    password_secured = models.BooleanField(default=False)
    password = models.CharField(max_length=100, blank=True, null=True)

Так, если установлен флажок password_secured (True/False), ссылка будет иметь поле для ввода пароля.

Моя проблема: У меня возникли проблемы с предоставлением каждой ссылке на страницу которая защищена паролем формы.

Если одна ссылка имеет password_secured True (и пароль) -> Форма необходима для каждой ссылки, которая имеет пароль -> если пароль правильный (форма действительна) -> password_secured False -> ссылка разблокирована

Шаблон:

 #here just a for loop to display every object of the specific user into the html template
  <a {% if i.password_secured == False %} href="{{i.url}}{% endif %}"></a>
 #for loop end

Простое значение шаблона:

  1. If password secured False -> put the href in the Link(Button)
  2. If password secured True -> Password form must be correct -> set secured secured_password False -> back to 1.
And the important Views File:
def LinkView(request, username):
    User = get_user_model()
    custom = User.objects.get(username=username)

    if request.method == 'POST':
        locked_form = LockedFieldForm(request.POST)
        if locked_form.is_valid():

            return redirect('')
    else:
        locked_form = LockedFieldForm()

    return render(request, 'linkview.html', {'custom': custom, 'locked_form': locked_form})

Что мне нужно:

  • что нужно написать после: ..form.is_valid()
  • и даже получить текущий id ссылки, для которой мне нужна форма пароля

Интересно то, что я не могу сохранить/изменить boolean в базе данных (тогда password_secured будет для всех False), но для посетителя, который пытается разблокировать ссылку с паролем. Может ли это работать с save(commit=False), чтобы это было основано на сессии?

Редактирование: Вот как выглядит LockedFieldForm

class LockedFieldForm(forms.Form):
    password = forms.CharField(max_length=100)

И конечно, если на странице есть несколько заблокированных паролем ссылок, мне нужно несколько форм. Может быть, это работает с помощью цикла for в представлениях? for item which is password_secured -> form или что-то вроде этого?

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