본문 바로가기

그 땐 IT활동했지/그 땐 영일영 근무했지

[010/Django] django-import-export | Widget | DateTimeWidget

728x90

문제 상황

https://itwithruilan.tistory.com/70

db에 핸드폰 가게에 맞게 리뷰들을 잘 넣었는데!(↑이전 포스팅 참고) 날짜 데이터를 넣어야 하는 상황에 직면했다! 

날짜 데이터는 나타내는 형식이 너무 많다. 2022-03-10, 2022/03/10, 2022.03.10 흠 대충 생각해도 세가지는 된다.

때문에 엑셀에 어떻게 날짜 데이터를 입력해야 db에 잘 넣을 수 있을지 고민이었는데 이건 DateTimeWidget으로 해결!ㅎㅎ

 

아래 공식 문서도 참고!(widget 모음 페이지)

https://django-import-export.readthedocs.io/en/latest/api_widgets.html

 

Widgets — django-import-export 2.7.2.dev0 documentation

© Copyright 2012–2020, Bojan Mihelac Revision 0ad13e0c.

django-import-export.readthedocs.io

 

DateTimeWidget을 사용해보자!
#models.py
from store.models import Store

class CommunityReview(models.Model):
    store = models.ForeignKey(Store, on_delete=models.CASCADE, related_name='commu_review_owner')
    content = models.TextField(null=True, blank=True)
    rate = models.FloatField(null=True, blank=True)
    visit_date = models.DateTimeField(max_length=80, null=True, blank=True)

👉🏻CommunityReview의 model은 다음과 같다. 여기서 visit_date 필드가 DateTimeField이기 때문에 admin.py를 약간 손봐주기로 하자!^^ 

#admin.py
from django.contrib import admin
from .models import CommunityReview
from store.models import Store
from import_export.admin import ImportExportModelAdmin
from import_export.widgets import ForeignKeyWidget
from import_export import resources, fields


class CommunityReviewResource(resources.ModelResource):
    store = fields.Field(
        column_name = 'store',
        attribute = 'store',
        widget = ForeignKeyWidget(Store, 'location')
    )
    #여기 주목!
    visit_date = fields.Field(
        column_name = 'visit_date',
        attribute = 'visit_date',
        widget = DateTimeWidget(),
    )
    
    class Meta:
        model = CommunityReview
        fields = ('id', 'store', 'content', 'rate', 'visit_date',)
        export_order = fields


class CommunityReviewAdmin(ImportExportModelAdmin):
    fields = ('store', 'content', 'rate', 'visit_date',)
    list_display = ('id', 'store', 'content', 'rate', 'visit_date',)
    resource_class = CommunityReviewResource


admin.site.register(CommunityReview, CommunityReviewAdmin)

👉🏻visit_date field를 다음과 같이 정의했다!

👉🏻widget에 DateTimeWidget()이라고 지정하면 날짜 데이터로 알맞게 들어간다. 매개 변수로 날짜 형식을 지정할 수 있고 혹은 settings의 DATETIME_INPUT_FORMATS에 형식을 지정할 수 있다. 내 코드처럼 지정하지 않으면 기본적으로 "%Y-%m-%d %H:%M:%S" 이 형식이 쓰인다.

728x90