Hi Anssi, thanks for your answer.

I already thought about that, but checking the code from
django.db.models.base.Model#__eq__() is not telling me the same:

    def __eq__(self, other):
        return isinstance(other, self.__class__) and self._get_pk_val()
== other._get_pk_val()



On 03/22/2013 05:02 PM, akaariai wrote:
> On 22 maalis, 15:44, Roberto López López <roberto.lo...@uni.no> 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 django-users+unsubscr...@googlegroups.com.
To post to this group, send email to django-users@googlegroups.com.
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