如何在SQL和Django中的另一个表中使用带有字段的WHERE子句?

时间:2019-03-02 22:53:09

标签: django sqlite

这是来自django的第一个应用程序proizvodi的类中的表:

class Meblovi(models.Model):
    class Meta:
        verbose_name_plural = "Meblovi"

    #OSNOVNI_PODACI
    ime_proizvoda = models.CharField(max_length=120)
    proizvodjac = models.CharField(max_length=120, default="proizvodjac")
    sastav = models.CharField(max_length=120, default="sastav")
    sirina = models.CharField(max_length=120, default="sirina")
    zemlja_porekla = models.CharField(max_length=120, default="zemlja porekla")
    stara_cena = models.DecimalField(decimal_places=2,max_digits=10,default=795.00)
    nova_cena = models.DecimalField(decimal_places=2,max_digits=10,default=795.00)
    na_lageru = models.BooleanField()
    rok_isporuke = models.CharField(max_length=120, default="3 dana")
    jedinica_mere = models.CharField(max_length=120, default="po dužnom metru")

    #SLIKE
    glavna_slika = models.ImageField(upload_to='proizvodi/', null=True, blank=True)

    #KARAKTERISTIKE
    vodootporan = models.BooleanField(default=False)
    vodoodbojan = models.BooleanField(default=False)
    nezapaljiv = models. BooleanField(default=False)

    #OSTALO
    izdvojeno = models.BooleanField()



    def __str__(self):
        return self.ime_proizvoda

现在,这是另一个应用程序中的表格:

class Podmeblovi(models.Model):
    class Meta:
        verbose_name_plural = "Meblovi - podvrste"

    #OSNOVNI_PODACI
    model_mebla = models.CharField(max_length=120)
    mebl = models.ForeignKey(Meblovi, on_delete=models.CASCADE)
    slika = models.ImageField(upload_to='proizvodi/', null=True, blank=True)

    #BOJE
    bela = models.BooleanField(default=False)
    svetlo_siva = models.BooleanField(default=False)
    tamno_siva = models.BooleanField(default=False)
    crna = models.BooleanField(default=False)
    bez = models.BooleanField(default=False)
    braon = models.BooleanField(default=False)
    zuta = models.BooleanField(default=False)
    narandzasta = models.BooleanField(default=False)
    crvena = models.BooleanField(default=False)
    bordo = models.BooleanField(default=False)
    svetlo_zelena = models.BooleanField(default=False)
    tamno_zelena = models.BooleanField(default=False)
    svetlo_plava = models.BooleanField(default=False)
    tamno_plava = models.BooleanField(default=False)
    pink = models.BooleanField(default=False)
    ljubicasta = models.BooleanField(default=False)

    #DIZAJN
    jednobojno = models.BooleanField(default=False)
    sareno = models.BooleanField(default=False)

    def __str__(self):
        return self.mebl.ime_proizvoda + " " + self.model_mebla

所以我想要做一个SQL查询,该查询返回表Podmeblovi(第二个应用程序)中的内容,但前提是表Meblovi(第一个应用程序)“ vodootporan”中的字段等于1。我尝试了INNER JOIN,但没有这样做似乎行得通。另外,我想使用RIGHT JOIN,但是它说在Django中还不能使用。 我的第二个应用程序表通过外键连接到第一个应用程序表。为了更好地说明,第一个应用程序表是产品的基本默认信息表。因此,例如,如果我们有一个名为Portland的面料产品,那么我们将在第二个应用程序中获得其子产品。它们是不同的颜色和设计,但价格和其他规格对它们而言是相同的。那我该如何解决这个问题呢?

我尝试过的事情:

SELECT * FROM modeli_meblova_podmeblovi
INNER JOIN "proizvodi_meblovi" ON ("proizvodi_meblovi"."vodootporan" = "meblovi") 
WHERE "proizvodi_meblovi" = 1

这确实没有错误,但是在我的数据库中,我为“ vodootporan”字段检查了产品是否为true,但是sql没有从数据库返回任何模型。

请明确一点,我需要sql查询,因为我有很多与此集成的过滤器。其他过滤器来自基表,而不是联合表。

1 个答案:

答案 0 :(得分:0)

您没有展示您尝试过的内容。但这应该可行:

Podmeblovi.objects.filter(mebl__vodootporan=True)