>我正在尝试检索属于 CharField 的表单的数据,该表单在 Django 中使用选择。
我有以下 models.py:
class Transaccion(models.Model):
ref = models.CharField(max_length=20, primary_key=True)
fecha = models.DateField(default=timezone.now)
usua = models.ForeignKey(User, on_delete=models.CASCADE, blank=True, null=True)
monto = models.FloatField(max_length=50, blank=True, null=True)
TYPE_TRANS = (
('d', 'Debito'),
('c', 'Credito'),
)
tipo = models.CharField(max_length=1, choices=TYPE_TRANS)
LOAN_STATUS = (
('a', 'Aprobada'),
('e', 'Pendiente'),
('c', 'Rechazada'),
)
estado = models.CharField(max_length=1, choices=LOAN_STATUS, blank=True, default='e')
TYPE_BANCO = (
('BBVA', 'Bco BBVA Provincial'),
('BOD', 'Banco Occidental de Descuento'),
('MER','Bco Mercantil')
)
bco = models.CharField(max_length=4, choices=TYPE_BANCO, blank=True)
以下 forms.py:
class GestionarTransaccionForm(forms.ModelForm):
class Meta:
model = Transaccion
fields = [
'usua',
'fecha',
'bco',
'ref',
'monto',
'tipo',
'estado',
]
widgets={
'usua': forms.TextInput(attrs={'class': 'form-control', 'readonly': True}),
'fecha': forms.TextInput(attrs={'class': 'form-control', 'readonly': True}),
'bco': forms.Select(attrs={'class': 'form-control', 'readonly': True}),
'ref': forms.TextInput(attrs={'class': 'form-control', 'readonly': True}),
'monto': forms.TextInput(attrs={'class': 'form-contol', 'readonly': True}),
'tipo': forms.Select(attrs={'class': 'form-control', 'readonly': True}),
'estado': forms.Select(attrs={'class': 'form-control'}),
}
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['ref'].disabled = True
self.fields['fecha'].disabled = True
self.fields['usua'].disabled = True
self.fields['monto'].disabled = True
self.fields['tipo'].disabled = True
self.fields['bco'].disabled = True
而这 views.py:
class GestionarTransaccion(UpdateView):
model = Transaccion
form_class = GestionarTransaccionForm
template_name = "administrador/gestionarT.html"
success_url = reverse_lazy('transManager')
def form_valid(self, form):
instance = form.save(commit=False)
u = User()
if form.cleaned_data['estado']=='Aprobado':
if form.cleaned_data['tipo']=='Credito':
u.incrementarSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
elif form.cleaned_data['tipo']=='Debito':
u.disminuirSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
return super().form_valid(form)
处理这个小代码片段时出现问题:
if form.cleaned_data['estado']=='Aprobado':
if form.cleaned_data['tipo']=='Credito':
u.incrementarSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
elif form.cleaned_data['tipo']=='Debito':
u.disminuirSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
它要求在用户内部使用几种方法(确实有效的方法,因为我在没有条件的情况下尝试了它们并且完美无缺(,但它对条件没有任何作用。我怀疑cleaned_data格式不是我认为的那样,但是尝试使用代码("d"而不是"Debito"(根本无济于事。知道如何使用它的任何想法?
编辑
更改为
if form.cleaned_data['estado']=='a':
if form.cleaned_data['tipo']=='c':
u.incrementarSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
elif form.cleaned_data['tipo']=='d':
u.disminuirSaldo(form.cleaned_data['monto'], form.cleaned_data['usua'])
它神奇地起作用了,尽管我尝试过并且以前没有工作过。
字段中存储的值是选择元组中的第一个元素,而不是第二个元素。
if form.cleaned_data['estado'] == 'a':
if form.cleaned_data['tipo'] == 'c':