#django #django-views #django-forms
Вопрос:
Я пытался найти решение в Интернете, но не нашел ни одного, которое работало бы, я надеялся, что вы, ребята, могли бы помочь мне с этим, так как я был в этой ситуации уже два дня. Моя проблема в том, что всякий раз, когда я пытался обновить одно из полей моего пользователя, появляется ошибка, в которой говорится, что необходимо обновить и другие поля. Я попытался включить blank=True
одно из полей моей пользовательской модели, чтобы требуемое значение стало Ложным, но когда я нажимаю обновить на передней панели, те поля, которые я не изменил, становятся пустыми. Все, что я хочу, — это позволить пользователю обновлять одно поле, если он или она тоже этого хочет, без необходимости обновлять другие поля.. так же, как и на сайте администратора, вы можете свободно обновлять одно поле пользователя, и это не выдаст вам ошибку. Может ли кто-нибудь помочь мне с этим?
таково мое мнение
class ProfileUpdateView(LoginRequiredMixin,UpdateView): model = User form_class = UserUpdateForm template_name = 'accounts/profile_update.html' def get_object(self, *args, **kwargs): return User.objects.get(username=self.kwargs.get('username')) def get_success_url(self): self.object = self.get_object() return reverse_lazy('accounts:profile_update', self.request.user.username)
это моя форма
class UserUpdateForm(forms.ModelForm): class Meta: model = User fields = ['first_name', 'last_name', 'email', 'phone_number', 'current_address', 'image']
Я попробовал это
Мое мнение
class ProfileUpdateView(LoginRequiredMixin,UpdateView): model = User form_class = UserUpdateForm template_name = 'accounts/profile_update.html' def get_object(self, *args, **kwargs): return User.objects.get(username=self.kwargs.get('username')) def get_success_url(self): self.object = self.get_object() return reverse_lazy('accounts:profile_update', self.request.user.username) #I added this def get_form_kwargs(self): form = super().get_form_kwargs() form['user'] = self.request.user return form
Моя форма
class UserUpdateForm(forms.ModelForm): #I added this def __init__(self, user, *args, **kwargs): self.user = user super(UserUpdateForm, self).__init__(*args, **kwargs) self.fields['first_name'].initial = user.first_name self.fields['last_name'].initial = user.last_name self.fields['email'].initial = user.email self.fields['phone_number'].initial = user.phone_number self.fields['current_address'].initial = user.current_address self.fields['image'].initial = user.image class Meta: model = User fields = ['first_name', 'last_name', 'email', 'phone_number', 'current_address', 'image']
I also tried get_initial
on my updateview
def get_initial(self): initial = super().get_initial() initial['first_name'] = self.request.user.first_name initial['last_name'] = self.request.user.last_name initial['email'] = self.request.user.email initial['phone_number'] = self.request.user.phone_number initial['current_address'] = self.request.user.current_address initial['image'] = self.request.user.image return initial