0

I'm developing a shopping mall integrated management site.

There is a lot of order data in one Excel file, and the data in each row of order data contains the data required for each model, so the reason the model is separated is because it has been normalized. Anyway, I want to put the data in this Excel in the field of each model. Is there a way? And I will receive the Excel file from the template through form.

There are three models, and I want to insert data from one Excel file into the fields of each model.?

models.py

배송요금정산코드 = (
    ('정산완료','정산완료'),
    ('미정산','미정산'),
    ('취소/차감','취소/차감'),
)
'''배송관리 모델'''
class DEL(models.Model):
    del_no = models.CharField(db_column='DEL_NO', max_length=17, primary_key=True)  # Field name made lowercase.
    ord_no = models.ForeignKey('ORD', models.DO_NOTHING, db_column='ORD_NO' ,related_name='ORD_NO_DEL',verbose_name='주문번호')  # Field name made lowercase.
    del_wy_cd = models.CharField(db_column='DEL_WY_CD', max_length=19,verbose_name='배송방법코드')  # Field name made lowercase.
    del_co = models.CharField(db_column='DEL_CO', max_length=20, blank=True, null=True,verbose_name='택배사')  # Field name made lowercase.
    wb_no = models.CharField(db_column='WB_NO', unique=True, max_length=14, blank=True, null=True,verbose_name='송장번호')  # Field name made lowercase.
    wb_dttm = models.DateTimeField(db_column='WB_DTTM', blank=True, null=True,verbose_name='송장입력일시')  # Field name made lowercase.
    to_nm = models.CharField(db_column='TO_NM', max_length=100,verbose_name='수취인명')  # Field name made lowercase.
    to_tel1 = models.CharField(db_column='TO_TEL1', max_length=12,verbose_name='수취인 연락처1')  # Field name made lowercase.
    to_tel2 = models.CharField(db_column='TO_TEL2', max_length=45, blank=True, null=True,verbose_name='수취인 연락처2')  # Field name made lowercase.
    del_addr = models.CharField(db_column='DEL_ADDR', max_length=150,verbose_name='배송 주소')  # Field name made lowercase.
    del_msg = models.CharField(db_column='DEL_MSG', max_length=100, blank=True, null=True,verbose_name='배송 메시지')  # Field name made lowercase.
    p_qty = models.IntegerField(db_column='P_QTY',verbose_name='상품수량')  # Field name made lowercase.
    del_qty = models.IntegerField(db_column='DEL_QTY',verbose_name='배송 수량')  # Field name made lowercase.
    del_type_cd = models.CharField(db_column='DEL_Type_CD', max_length=10,verbose_name='배송유형코드')  # Field name made lowercase.
    out_delc_type = models.CharField(db_column='Out_DELC_Type', max_length=20,verbose_name='배송요금타입')  # Field name made lowercase.
    del_pos_cd = models.CharField(db_column='DEL_POS_CD', max_length=10,verbose_name='배송처리코드')  # Field name made lowercase.
    delc_advance_pay_cd = models.CharField(db_column='DELC_Advance_Pay_CD', max_length=10,verbose_name='배송요금정산코드')  # Field name made lowercase.
    delc_pay_cd = models.CharField(db_column='DELC_PAY_CD',default='미정산',choices=배송요금정산코드, max_length=10,verbose_name='배송요금정산일')  # Field name made lowercase.
    out_delc_tot = models.IntegerField(db_column='Out_DELC_TOT',verbose_name='외부 배송요금합계')  # Field name made lowercase.
    out_delc_extry = models.SmallIntegerField(db_column='Out_DELC_extry',verbose_name='외부 배송추가요금')  # Field name made lowercase.
    delc_tot = models.IntegerField(db_column='DELC_TOT',verbose_name='배송요금 합계(정산)')  # Field name made lowercase.
    delc_extry = models.SmallIntegerField(db_column='DELC_extry',verbose_name='배송추가 요금(정산)')  # Field name made lowercase.
    delc_pay_due = models.IntegerField(db_column='DELC_PAY_Due',verbose_name='배송비 정산예정액')  # Field name made lowercase.
    delc_pay_dttm = models.DateTimeField(db_column='DELC_PAY_DTTM', blank=True, null=True,verbose_name='배송 요금정산 일시' )  # Field name made lowercase.

    class Meta:
        # managed = False
        verbose_name = '주문 묶음배송'
        verbose_name_plural = '주문 묶음배송'
        db_table = 'DEL'
        constraints = [
            models.UniqueConstraint(fields=['ord_no', 'del_no'], name='배송관리 식별자')
        ]

'''고객 주문 모델'''
class ORD(models.Model):
    ord_no = models.IntegerField(db_column='ORD_NO', primary_key=True,verbose_name='주문번호')  # Field name made lowercase.
    ord_byr_nm = models.CharField(db_column='ORD_BYR_NM', max_length=100,verbose_name='구매자 이름')  # Field name made lowercase.
    ord_pay_dttm = models.DateTimeField(db_column='ORD_PAY_DTTM', verbose_name='주문결제일시')  # Field name made lowercase.
    ord_byr_tel_no = models.CharField(db_column='ORD_BYR_TEL_NO', max_length=12,verbose_name='구매자 연락처')  # Field name made lowercase.
    ord_sale_channel = models.CharField(db_column='ORD_Sale_Channel', max_length=20,verbose_name='판매채널')  # Field name made lowercase.
    ord_delc_tot = models.IntegerField(db_column='ORD_DELC_TOT',verbose_name='배송요금합계')  # Field name made lowercase.
    ord_st_cd = models.CharField(db_column='ORD_ST_CD', max_length=10,verbose_name='주문상태 코드')  # Field name made lowercase.
    ord_bd_qty = models.SmallIntegerField(db_column='ORD_BD_QTY',verbose_name='주문 묶음(배송)수')  # Field name made lowercase.

    class Meta:
        verbose_name = '주문서'
        verbose_name_plural = '주문서'
        # managed = False
        db_table = 'ORD'


상품주문정산코드 = (
    ('정산완료','정산완료'),
    ('미정산','미정산'),
    ('취소/차감','취소/차감'),
)

'''고객 상품주문관리 모델'''
class PORD(models.Model):
    p_ord_no = models.IntegerField(db_column='P_ORD_NM',primary_key=True,verbose_name='상품주문번호')  # Field name made lowercase.
    ord_no = models.ForeignKey(ORD, models.DO_NOTHING, db_column='ORD_NO', related_name='ORD_NO_PORD',verbose_name='주문번호')  # Field name made lowercase.
    del_no = models.ForeignKey(DEL, models.DO_NOTHING, db_column='DEL_NO', related_name='DEL_NO_PORD',verbose_name='묶음배송번호')  # Field name made lowercase.
    prod_no = models.ForeignKey(POPT, models.DO_NOTHING, db_column='PROD_NO', related_name='PROD_NO_PORD',verbose_name='생산자')  # Field name made lowercase.
    p_no = models.ForeignKey(P, models.DO_NOTHING, db_column='P_NO',related_name='P_NO_PORD',verbose_name='상품명')  # Field name made lowercase.
    p_opt_no = models.ForeignKey(POPT, models.DO_NOTHING, db_column='P_OPT_NO', related_name='P_OPT_NO_PORD',verbose_name='옵션명')  # Field name made lowercase.
    p_ord_ck_dttm = models.CharField(db_column='P_ORD_CK_DTTM', max_length=14,verbose_name='발주확인일시')  # Field name made lowercase.
    p_ord_del_dt_lmt = models.CharField(db_column='P_ORD_DEL_DT_LMT', max_length=14,verbose_name='발송기한')  # Field name made lowercase.
    p_ord_qty = models.SmallIntegerField(db_column='P_ORD_QTY',verbose_name='상품수량')  # Field name made lowercase.
    p_ord_tot_price = models.IntegerField(db_column='P_ORD_TOT_Price',verbose_name='총금액')  # Field name made lowercase.
    p_ord_fee_type = models.CharField(db_column='P_ORD_FEE_Type', max_length=30, blank=True, null=True,verbose_name='수수료과금구분(네이버)')  # Field name made lowercase.
    p_ord_pay_cd = models.CharField(db_column='P_ORD_PAY_CD', max_length=10, default='미정산', choices=상품주문정산코드,verbose_name='상품정산코드')  # Field name made lowercase.
    p_ord_pay_due = models.IntegerField(db_column='P_ORD_PAY_Due', verbose_name='상품정산액')  # Field name made lowercase.
    p_ord_pay_dttm = models.DateTimeField(db_column='P_ORD_PAY_DTTM',verbose_name='상품정산일',auto_now=True)

    class Meta:
        # managed = False
        verbose_name = '상품주문서'
        verbose_name_plural = '상품주문서'
        db_table = 'P_ORD'
        constraints = [
            models.UniqueConstraint(fields=['ord_no', 'del_no', 'p_ord_no'], name='상품주문관리 식별자')
        ]

대리홍
  • 1
  • 2
  • Pass the data into pandas and iterate through the rows then use Model.object.create("Specifying each column from the rows") – theseeker Jan 18 '22 at 14:47
  • Thank you for your answer. Should I do it at views.py? Can you show us an example? I've been trying for a few days.... – 대리홍 Jan 18 '22 at 15:03
  • depending on the size of you data, you might want to interact with the database directly. follow this [link](https://stackoverflow.com/questions/31997859/bulk-insert-a-pandas-dataframe-using-sqlalchemy?noredirect=1&lq=1) most of the solution use SQLalchemy. So you will have to write a separate .py file that will execute this – theseeker Jan 18 '22 at 15:15
  • What keyword should I search on Google? – 대리홍 Jan 18 '22 at 15:19
  • [link](https://stackoverflow.com/questions/31997859/bulk-insert-a-pandas-dataframe-using-sqlalchemy?noredirect=1&lq=1) Just follow the implementation here. – theseeker Jan 18 '22 at 16:32
  • I read the document, but unfortunately I couldn't find the answer. However, in the first answer, we found that we could use Model.object.create(), which helped us a lot. If we solve it, we will share the solution. – 대리홍 Jan 19 '22 at 00:48

0 Answers0