Django изменяет булево значение после POST
Я пытаюсь клонировать linkr.ee только для обучения
Страница выглядит следующим образом:
- У каждого пользователя есть страница
- На этой странице у одного пользователя может быть несколько ссылок .
- Ссылка может иметь поле пароля для разблокировки ссылки если пользователь установил пароль на 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
Простое значение шаблона:
- If password secured False -> put the href in the Link(Button)
- 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 или что-то вроде этого?
