Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django-queryset join without foreignkey

model.py

class Tdzien(models.Model):   dziens = models.SmallIntegerField(primary_key=True, db_column='DZIENS')   dzienrok = models.SmallIntegerField(unique=True, db_column='ROK')   class Tnogahist(models.Model):   id_noga = models.ForeignKey(Tenerg, primary_key=True, db_column='ID_ENERG')   dziens = models.SmallIntegerField(db_column='DZIENS') 

What I want is to get id_noga where dzienrok=1234. I know that dziens should be

dziens = models.ForeignKey(Tdzien) 

but it isn't and I can't change that. Normally I would use something like

Tnogahist.objects.filter(dziens__dzienrok=1234) 

but I don't know how to join and filter those tables without foreignkey.

like image 436
luzik Avatar asked Oct 25 '13 12:10

luzik


2 Answers

No joins without a foreign key as far as I know, but you could use two queries:

Tnogahist.objects.filter(dziens__in=Tdzien.objects.filter(dzienrok=1234))

like image 187
RemcoGerlich Avatar answered Sep 23 '22 14:09

RemcoGerlich


It's possible to join two tables by performing a raw sql query. But for this case it's quite nasty, so I recommend you to rewrite your models.py.

You can check how to do this here

It would be something like this:

from django.db import connection  def my_custom_sql(self):     cursor = connection.cursor()         cursor.execute("select id_noga                     from myapp_Tnogahist a                     inner join myapp_Tdzien b on a.dziens=b.dziens                     where b.dzienrok = 1234")     row = cursor.fetchone()     return row 
like image 21
Lucas Avatar answered Sep 22 '22 14:09

Lucas