Как использовать левое соединение orm?

Моя модель

class Ad_company(models.Model):
    idx = models.AutoField(primary_key=True)
    subject = models.CharField(max_length=255)
    memo = models.CharField(max_length=255)
    content = models.TextField()
    is_display = models.CharField(max_length=1)
    writer = models.CharField(max_length=255)
    write_date = models.DateTimeField()
    update_date = models.DateTimeField()
    delete_date = models.DateTimeField()
    deadline_date = models.DateTimeField()
    reply = models.IntegerField(blank=True)
    hits = models.IntegerField(blank=True)
    ad_apply = models.IntegerField(blank=True)
    ad_category1 = models.CharField(max_length=255)
    ad_category2 = models.CharField(max_length=255)
    ad_place = models.CharField(max_length=255)
    ad_age = models.CharField(max_length=255)
    ad_sex = models.CharField(max_length=255)
    ad_budget = models.BigIntegerField()
    ad_length = models.CharField(max_length=255)
    is_done = models.CharField(max_length=1)
    is_pay = models.CharField(max_length=1)
    ad_service = models.CharField(max_length=255)
    ad_object = models.CharField(max_length=255)
    is_file = models.CharField(max_length=1)
    ad_require = models.CharField(max_length=255)

    class Meta:
        managed = False
        db_table = 'ad_write_company'


class Ad_company_apply(models.Model):
    idx = models.AutoField(primary_key=True)
    parent_idx = models.IntegerField()
    username = models.CharField(max_length=255)
    content = models.TextField()
    date = models.DateTimeField(default=datetime.now, blank=True)
    budget = models.BigIntegerField()
    term = models.IntegerField()
    is_done = models.CharField(max_length=1)


SELECT * FROM ad_write_company INNER JOIN ad_write_company_apply ON ad_write_company.idx = ad_write_company_apply.parent_idx where ad_write_company_apply.is_done = 1 and ad_write_company_apply.username = 'asdffdsa'

Вот мой запрос. Но я не могу сделать join запрос с orm. Извините за слишком короткий вопрос.

Правилен ли мой запрос?

Я не уверен в этом. Спасибо за ответ.

или у вас есть другая хорошая идея?

Я бы посоветовал работать с ForeignKey от Ad_company_apply к Ad_company. Это облегчит составление запросов в Django и гарантирует ссылочную целостность.

Таким образом, имеет смысл переписать модель Ad_company_apply на:

class Ad_company_apply(models.Model):
    # …
    parent_idx = models.ForeignKey(
        Ad_company,
        db_column='parent_idx',
        on_delete=models.CASCADE
    )
    # …

В этом случае вы можете .filter(…) [Django-doc] с:

Ad_Company.objects.filter(ad_company_appy__isdone=1, ad_company_appy__username='asdffdsa')

Примечание: Модели в Django пишутся в PascalCase, а не snake_case, поэтому вы можете переименовать модель из Ad_company в AdCompany.

Вернуться на верх