At first step I will describe my models:
class Meter(models.Model):
id = models.IntegerField(primary_key=True)
........some stuff here...
collector = models.ManyToManyField("self",
through='MeterCollector', symmetrical=False)
class MeterCollector(models.Model):
meter = models.ForeignKey(Meter, related_name='meter_id')
collector_node = models.ForeignKey(Meter,
related_name='collecotor_node_id')
def __unicode__(self):
return u'meter id: %s; collector node id: %s;' %
( self.meter_id, self.collector_node_id)
class Meta:
db_table = 'meter_to_collector'
class MeterSspec(models.Model):
id = models.IntegerField(primary_key=True)
meter = models.ForeignKey(Meter)
sspec = models.ForeignKey(Sspec)
......some stuff...
Everything works fine until I use filter like this in view.py:
meter_list = Meter.objects.all().filter(meter__metersspec__sspec =
sspec_id)
I expect something like "Give me all meters that have sspec_id = 1",
so my custom query will be:
SELECT `meter`.`id`, `meter`.`description` FROM `meter` LEFT JOIN
`meter_to_collector` ON (`meter`.`id` =
`meter_to_collector`.`collector_node_id`) LEFT JOIN `meter` T3 ON
(`meter_to_collector`.`meter_id` = T3.`id`) INNER JOIN `meter_sspec`
ON (`meter`.`id` = `meter_sspec`.`meter_id`) WHERE
`meter_sspec`.`sspec_id` = '1'
But django gives me something like this:
SELECT `meter`.`id`, `meter`.`description` FROM `meter` INNER JOIN
`meter_to_collector` ON (`meter`.`id` =
`meter_to_collector`.`collector_node_id`) INNER JOIN
`meter` T3 ON (`meter_to_collector`.`meter_id` = T3.`id`) INNER JOIN
`meter_sspec` ON (T3.`id` = `meter_sspec`.`meter_id`) WHERE
`meter_sspec`.`sspec_id` = '1'
There are 2 common problems:
1) How can I force django to use LEFT JOIN ???
2) Genreal problem: Im wondering why django joins meter_sspec with
meter_to_collector (T3) and not with meter???
So, is there any way to do it without custom sql query ?
Alex M Vdovin.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Django users" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/django-users?hl=en
-~----------~----~----~----~------~----~------~--~---