반응형
다른 블로그들 잘 정리해 놓은 블로그들이 많았다.
하지만 prefetch_related('') 괄호안에 외래키값를 넣어도 안되고 join할 모델명을 넣어도 join되지 않았다.
이것 저것 조사해본 결과 알게 된것을 나같은 장고 초보자 들도 알 수있게 써보려고 한다.
일단 join할 모델에 대한 설명
class Medicine(models.Model) :
med_uid = models.AutoField(primary_key=True)
user_uid = models.ForeignKey(USER.User,on_delete=models.SET_NULL,db_column='user_uid',null=True)
med_name = models.CharField(max_length=20)
med_type = models.CharField(max_length=8)
med_buyprice = models.PositiveIntegerField()
med_sellprice = models.PositiveIntegerField()
med_cgst = models.PositiveSmallIntegerField()
med_sgst = models.PositiveSmallIntegerField()
med_expire = models.DateField()
med_mfg = models.DateField()
med_desc = models.TextField()
med_instock = models.PositiveIntegerField()
med_qty = models.PositiveSmallIntegerField()
med_company = models.CharField(max_length=30)
class Med_salt(models.Model) :
salt_uid = models.AutoField(primary_key=True)
med_uid = models.ForeignKey(Medicine, related_name="med_salt_set", on_delete=models.CASCADE, db_column='med_uid')
salt_name = models.CharField(max_length=20)
salt_qty = models.DecimalField(max_digits=5, decimal_places=3)
salt_qty_type = models.CharField(max_length=20)
medicine의 상세 성분표가 med_salt이다.
medicine의 list를 조회할때 med_salt를 같이 join하여 조회하는데
약품에 성분 한개만 존재하는 것이 아니라 여러개 존재하므로
1대 다 join을 해야한다.
1대 다중에서 다인 med_salt의 외래키 모델에 related_name=""을 반드시 정해주고
prefetch_related()의 괄호 안에 related_name을 작성해 준다.
medicineList = Medicine.objects.filter(user_uid=user_uid).prefetch_related('med_salt_set')
1대 다 join을 통해 뽑힌 데이터를 보기 위해
for문과 values()를 이용하여 콘솔창에 찍어서 확인해 볼 수 있다.
for data in medicineList:
print(data.med_salt_set.values())
반응형