Django: Как обновлять одно поле за раз на форме?
Я пытался найти решение в Интернете, но не нашел ни одного подходящего, я надеялся, что вы, ребята, сможете мне помочь, так как я нахожусь в этой ситуации уже два дня. Моя проблема в том, что каждый раз, когда я пытаюсь обновить одно из полей моего пользователя, выскакивает ошибка, говорящая, что необходимо обновить и другие поля. Я пробовал поместить blank=True
в одно из полей модели User, чтобы требуемое значение стало False, но когда я нажимаю кнопку update на front end, те поля, которые я не изменил, становятся пустыми. Все, что я хочу, это позволить пользователю обновить одно поле, если он или она хочет, без необходимости обновлять другие поля... так же, как на сайте администратора, вы можете свободно обновить одно поле пользователя, и это не вызовет ошибку. Может кто-нибудь помочь мне с этим?
это мое мнение
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']
Я также попробовал get_initial
на моем 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