开发者

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)
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜