Как сделать левое объединение в кверисете django

У меня есть две модели, и мне нужно выполнить операцию объединения слева. Я попробовал несколько решений, но пока безуспешно

Модели

class SmdRepairIn(models.Model):
    sum_ymd = models.DateField(blank=True, null=True)
    line_nm = models.CharField(max_length=20, blank=True, null=True)
    model_code = models.CharField(max_length=20, blank=True, null=True)

class SmdRepairOut(models.Model):  
    repair_in_id = models.CharField(max_length=20, blank=True, null=True)  
    repairman_out = models.CharField(max_length=30, blank=True, null=True)

SMDRepairIn.id == SmdRepairOut.repair_in_id

Я хочу получить результат соответствующего запроса:

select A.*, B.repairman_out 
from SmdRepairIn as A
     left join (select repairman_out from SmdRepairOut) B on (A.id = B.repair_in_id )

Как сделать это в django queryset?

Ожидаемый результат должен быть:

id, sum_ymd, line_nm, model_code, repairmain_out

Вы должны использовать Foreignkey уже в модели:

class SmdRepairIn(models.Model):
    sum_ymd = models.DateField(blank=True, null=True)
    line_nm = models.CharField(max_length=20, blank=True, null=True)
    model_code = models.CharField(max_length=20, blank=True, null=True)

class SmdRepairOut(models.Model):  
    repair_in = models.ForeignKey(SmdRepairIn, blank=True, null=True, on_delete=models.SET_NULL)  
    repairman_out = models.CharField(max_length=30, blank=True, null=True)

Это позволит вам запросить нужные вам выборки. Примеры см. здесь: https://docs.djangoproject.com/en/3.2/topics/db/examples/many_to_one/

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