On Wed, Nov 4, 2009 at 11:13 AM, Mark L. <mark.l...@gmail.com> wrote:
>
>
>
> On Nov 4, 11:20 am, Maksymus007 <maksymus...@gmail.com> wrote:
>> I'm trying to use modelformset for my model using specified form.
>> Everything works well unless i try to save forms - ale changes are
>> saved, but for 22 forms django generates 91 queries (some of them are
>> for auth, other parts etc - but this number should not exceed 30
>> counting one query for each form). Nevertheless, i got 22 queries like
>>
>> SELECT (1) AS "a" FROM "finances"."gates_approvals" WHERE
>> ("finances"."gates_approvals"."gate_approval_id" = 45 AND NOT
>> ("finances"."gates_approvals"."gate_approval_id" = 45 ))
>>
>> which is totally useless. Did anyone meet such a strange behaviour?
>
> Hello
>
> Yes, I've seen this behaviour, all right. This looks like a
> misbehaving uniqueness check and I've seen it happen in the .clean()
> method of the model (in model-validation branch), and, while this is
> certainly not where *you* are seeing it, the queries look just the
> same.
>
> This is the way Django handles uniqueness checks (and, quite frankly,
> this is the only way to do it), however it should not be performed for
> primary keys. If it wasn't a primary key field but some other
> "other_unique_field" the query would look like this 'select (1) as "a"
> from "table" where ("table"."other_unique_field" = 45 and not
> ("table"."id" = 45))', which makes perfect sense to me (this
> observation was made by another django-users member, so I am not the
> one to be thanked here).
>
> Anyway, I haven't (yet) read the source of ModelFormSet, so I can't
> give you any direct advice as to how to get rid of these queries.
> Could you post your model declaration, by the way?
>
> I hope my explanation helped at least a little bit.
>

Sure:

class GatesApprovals(models.Model):
    id = models.AutoField(primary_key=True, null=False,
db_column='gate_approval_id')
    gate = models.ForeignKey(Gates, null=False, db_column='gate_approval_gate')
    period = models.DateField(null=False, db_column='gate_approval_period')
    value = models.DecimalField(null=True, default=None, max_digits=5,
decimal_places=2, db_column='gate_approval_value')

    def __unicode__(self):
        return str(self.gate) + ' / ' + str(self.period)

    class Meta:
        db_table = 'finances"."gates_approvals'
        managed = False

and Gates:

class Gates(models.Model):
    gate = models.IntegerField(primary_key=True,db_column='gate_id')
    in_value = 
models.DecimalField(default=0,max_digits=4,decimal_places=2,db_column='gate_in_value')
    out_value =
models.DecimalField(default=0,max_digits=4,decimal_places=2,db_column='gate_out_value')
    out_limit = models.SmallIntegerField(default=0,db_column='gate_out_limit')

    shared = models.BooleanField(null=False, default=False,
db_column='gate_shared')

    class Meta:
        db_table = u'data"."gates'
        managed = False

    def __unicode__(self):
        return str(self.gate)

there is nothing like unique together or something - all those are
handled on database level.

I use modelformset_factory with custom form. First it was pure
ModelForm with meta part (maybe doubling instance managing i thought,
but that was not the case), then ModelForm without meta info - with
the same result. Pure form cannot be used with modelformset_factory.

--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to