我目前有一个表格可以成功更新模型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>
(...)