在django模型中查询

时间:2011-04-13 08:31:42

标签: django django-models django-forms

我正在使用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()

任何人都可以帮忙吗?谢谢!

1 个答案:

答案 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)