我正在使用django,因为我很新,我有一些问题。
我的models.py文件中有一个名为Signatures的模型和一个名为SignatureForm的ModelForm:
class Signature(models.Model):
sig = models.ForeignKey(Device)
STATE = models.CharField(max_length=3, choices=STATE_CHOICES)
interval = models.DecimalField(max_digits=3, decimal_places=2)
verticies = models.CharField(max_length=150)
class SignatureForm(ModelForm):
class Meta:
model = Signature
widgets = {
'verticies': HiddenInput,
}
要使用它,我在views.py中编写了以下函数:
def SigEditor(request):
# If the form has been sent:
if request.method == 'POST':
form = SignatureForm(request.POST)
# If it is valid
if form.is_valid():
# Create a new Signature object.
form.save()
return render_to_response('eQL/sig/form_sent.html')
else:
return render_to_response('eQL/sig/try_again.html')
else:
form = SignatureForm()
return render_to_response('eQL/sig/showImage.html', {'form' : form})
但是,我不想保存所有新签名。我的意思是,如果用户引入设备A和状态B的新签名,我想检查我的数据库中是否有这样的签名,删除它然后保存新签名以便我只保存一个签名对于每个设备和状态。
我在保存之前尝试了类似的东西,但当然不起作用:
q = Signature.objects.filter(sig = s, STATE = st)
if q.count != 0:
q.delete()
form.save()
任何人都可以帮忙吗?谢谢!
答案 0 :(得分:0)
如果你真的想删除,为什么不呢?
Signature.objects.filter(sig=s, STATE=st).delete()
如果您只想要这些项目的一种组合,则可以使用get_or_create
,并将实例传递给ModelForm
。
instance, created = Signature.objects.get_or_create(sig=s, STATE=st)
form = SignatureForm(request.POST, instance=signature)
# edit instance.
或者将它放在你的表单中保存逻辑:
class SignatureForm(ModelForm):
def save(self, *args, **kwargs):
data = self.cleaned_data
instance, created = Signature.objects.get_or_create(sig=data['sig'], STATE=data['state'])
self.instance = instance
super(SignatureForm, self).save(*args, **kwargs)