user700077
user700077

Reputation: 103

Django INNER JOIN by field

Say I have a model that is

class Bottles(models.Model)
    BottleCode = models.IntegerField()

class Labels(models.Model)
    LabelCode = models.IntegerField()

How do I get a queryset of Bottles where the BottleCode and LabelCode are equal? (i.e. Bottles and Labels with no common Code are excluded)

Upvotes: 2

Views: 452

Answers (1)

alecxe
alecxe

Reputation: 473873

It can be achieved via extra():

Bottles.objects.extra(where=["Bottles.BottleCode in (select Labels.LabelCode from Labels)"])

You may also need to add an app name prefix to the table names, e.g. app_bottles instead of bottles.

Though @danihp has a point here, if you would often encounter queries like these, when you are trying to relate unrelated models - you should probably think about changing your model design.

Upvotes: 2

Related Questions