query in django model
I am using django and as I am pretty new I have some questions.
I have one mode开发者_如何学Gol called Signatures and a ModelForm called SignatureForm in my models.py file:
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,
       }
To use it, I wrote the following function in 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})
However, I don't want to save all the new signatures. I mean, if the user introduces a new signature of the device A and state B, I would like to check if I have some signature like that in my database, delete it and then save the new one so that I have only one signature saved for each device and state.
I have tried something like this before saving it but of course is not working:
q = Signature.objects.filter(sig = s, STATE = st)
if q.count != 0:
      q.delete()
      form.save()
can anyone help?? thanks!!
If you really do want to delete, why not?
Signature.objects.filter(sig=s, STATE=st).delete()
If you only ever want one combination of those items, you could use get_or_create, and pass in the instance to your ModelForm.
instance, created = Signature.objects.get_or_create(sig=s, STATE=st)
form = SignatureForm(request.POST, instance=signature)
# edit instance.
Or put it in your form save logic:
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)
 
         加载中,请稍侯......
 加载中,请稍侯......
      
精彩评论