В настоящее время у меня есть форма, которая успешно обновляет модель User
и Client
.
Единственное, что я хочу, чтобы она также сделала, при доступе к странице обновления, что форма уже имеет текущая информация (как мы можем сделать с заполнителями, но фактически с редактируемыми данными), чтобы клиент мог редактировать то, что ему нужно.
Мне также интересно, есть ли способ обновления только изменил поля или если он должен обновить все, даже если это то же самое.
Это моя форма:
class UpdateClient(ModelForm):
address = forms.CharField(max_length=200, label="Morada", widget=forms.TextInput(attrs={'class': 'form-control'}))
nif = forms.CharField(max_length=9, label="NIF", validators=[RegexValidator(r'^\d{1,10}$')], widget=forms.TextInput(attrs={'class': 'form-control'}))
mobile = forms.CharField(max_length=9, label="Telemóvel", validators=[RegexValidator(r'^\d{1,10}$')], widget=forms.TextInput(attrs={'class': 'form-control'}))
def clean_nif(self):
nif = self.cleaned_data['nif'];
if Clients.objects.filter(nif=nif).exists(): raise forms.ValidationError("NIF já existente.")
return nif
def __init__(self, *args, **kwargs):
super(UpdateClient, self).__init__(*args, **kwargs)
self.fields['first_name'].widget = TextInput(attrs={'class': 'form-control'})
self.fields['last_name'].widget = TextInput(attrs={'class': 'form-control'})
self.fields['email'].widget = EmailInput(attrs={'class': 'form-control'})
class Meta:
model = User
fields = ('email','first_name','last_name', 'address', 'nif', 'mobile')
И это моя views.py
:
def client_det(request, nif):
ls= Clients.objects.get(nif=nif)
if request.method == 'POST':
form = UpdateClient(request.POST, instance=ls.user)
if form.is_valid():
user = form.save()
user.refresh_from_db()
user.clients.address = form.cleaned_data.get('address')
user.clients.nif = form.cleaned_data.get('nif')
user.clients.mobile = form.cleaned_data.get('mobile')
user.clients.save()
return redirect('clients')
else:
form = UpdateClient()
return render(request, 'backend/client_detail.html', {'form': form, 'ls': ls})
И мой client_detail.html
<form method="post">
{% csrf_token %}
<!-- Address -->
<h6 class="heading-small text-muted mb-4">Dados Cliente</h6>
<div class="pl-lg-4">
<div class="row">
<div class="col-lg-4">
<div class="form-group">
<label class="form-control-label" for="input-first-name">Primeiro Nome</label>
{{form.first_name}}
</div>
(...)