On 22 maalis, 15:44, Roberto López López <[email protected]> wrote:
> Hi,
>
> I have a problem with my data model while doing field lookups. This is
> my models.py:
>
> from django.db import models, IntegrityError
>
> # Create your models here.
>
> class Model1(models.Model):
>     title = models.CharField(max_length=15)
>     models2 = models.ManyToManyField('Model2', through='ThroughModel')
>
>     def __unicode__(self):
>         return self.title
>
> class Model2(models.Model):
>     title = models.CharField(max_length=15)
>
>     def __unicode__(self):
>         return self.title
>
> class ThroughModel(models.Model):
>     model1 = models.ForeignKey(Model1)
>     model2 = models.ForeignKey(Model2)
>     lead = models.BooleanField(default=False)
>
>     def __unicode__(self):
>         return u'{0} - {1} - {2}'.format(self.model1, self.model2,
> self.lead)
>
> Testing it on the django shell:
>
> >>> m1 = Model1.objects.create(title='blabla')
> >>> m2 = Model2.objects.create(title='blabla2')
> >>> m1.__eq__(m2)
>
> False                                                 # OBVIOUSLY>>> t = 
> ThroughModel.objects.create(model1=m1, model2=m2)
> >>> ThroughModel.objects.filter(model1__exact=m1)
>
> [<ThroughModel: blabla - blabla2 - False>]            # OK>>> 
> ThroughModel.objects.filter(model1__exact=m2)
>
> [<ThroughModel: blabla - blabla2 - False>]            # NOT OK!!!
>
> Am I missing anything? Can anyone spot the problem?
>
> Thanks for your advice.
>
> Regards,
>
> Roberto

The problem here is that Django doesn't do any verification that the
given model values for lookups are of correct type.  My bet is that
m1.pk == m2.pk. So, Django will create a query using m2.pk in
model1__exact=m2, and this is the reason you get the results you get.

 - Anssi

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/django-users?hl=en.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to