как проверить поле уже существует при обновлении формы - PullRequest
0 голосов
/ 19 апреля 2020

Я добавляю проверку в form.py, чтобы исключить ту же запись во время обновления, поэтому я проверяю, имя пользователя уже существует или нет, но self.instance.pk получает Нет.

Я знаю, что есть и другой способ сделать это, но я хочу знать, почему self.instance.pk не работал, я буду использовать этот подход и для других форм, поэтому мне нужно исправить это с помощью self.instance.pk вот мой код

, поэтому не могли бы вы просмотреть код, что мне не хватает и почему не работает self.instance.pk.

forms.py

from django import forms
from .models import CustomUser
class UserForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    password2 = forms.CharField(label='Password confirmation', widget=forms.PasswordInput)
    class Meta:
        model = CustomUser
        fields = '__all__'
        exclude = ["is_admin", "is_verified", "last_login"]

    def clean_username(self):
        username = self.cleaned_data.get("username")
        print(self.instance.pk)
        user_obj = CustomUser.objects.exclude(pk=self.instance.pk).get(username=username)
        if user_obj:
            raise forms.ValidationError("username already exist")
        return username

views.py

def edit_profile(request):
    context = {
        "form": UserForm()
    }
    user_obj = request.user
    form = UserForm(instance=user_obj)
    context["form"] = form
       if request.method == "POST":
            form = UserForm(request.POST)
            if form.is_valid():
                 form_obj = form.save()
    return render(request, "account/profile.html", context)

1 Ответ

0 голосов
/ 24 апреля 2020

когда я получаю запрос. Данные POST из формы form = UserForm(reqest.POST) Мне также нужно добавить экземпляр instance = request.user, поэтому правильный код будет

def edit_profile(request):
    context = {
        "form": UserForm()
    }
    user_obj = request.user
    form = UserForm(instance=user_obj)
    context["form"] = form
       if request.method == "POST":
            form = UserForm(request.POST, instance = request.user)
            if form.is_valid():
                 form_obj = form.save()
    return render(request, "account/profile.html", context)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...