Wa:tta Taxi (2)

On a regular basis·2021년 5월 26일
0

Wa:tta Taxi

목록 보기
2/4
post-thumbnail

오늘 한 것 중 기억하고 싶은 것들!

  • models.py만들고 push&pull
  • csv파일 만들기
  1. Models.py 만들 때 주의할 점!

1.1 in orders app
user = models.ForeignKey("users.User", on_delete=models.CASCADE)
status = models.ForeignKey("Status", on_delete=models.CASCADE)

  • User클래스는 users앱에 있고, Status는 orders앱에 있다. 그래서 다른앱에 있는 클래스를 불러올때는 "앱.class"로 넣어주기!

1.2 created_at = models.DateTimeField(auto_now=True)
auto_now 는 최종 수정일자
auto_now_add 는 첫 작성일자

1.3 price = models.DecimalField(max_digits=13, decimal_places=3)
DecimalField는 max_digits랑 decimal_places를 둘 다 넣어줘야함!
총 13자릿수 중에서 3자릿수가 소수점 뒷부분!

1.4 User - UserCoupon - Coupon
UserCoupon이 중간테이블!
coupon = models.ManyToManyField("Coupon", through="UserCoupon", null=True) -> User테이블에 이렇게 ManyToMany를 표현해주면됨!

1.5 python manage.py makemigrations
python manage.py migrate

1.6 git rebase?
git add .
git commit (작성하고)
git rebase -i main(여기서 pick-s를 통해 commit을 통합해주고 하나의 commit만 남겨주기!)
git push origin feature/eunhye20 -f

1.7 related_name

departure_location = models.ForeignKey("Location", on_delete=models.CASCADE, related_name='departure')
arrival_location   = models.ForeignKey("Location", on_delete=models.CASCADE, related_name='arrival')
  • 둘다 ForeignKey로 Location을 갖고 있는 상황에서 나중에 _set을 쓰는 상황이 올 때 헷갈릴 수 있다. 그렇기 때문에 related_name을 명시해주어 혼동을 피할 수 있다.
  1. CSV파일 만들기

2.1. manage.py에 .csv확장자로 테이블별로 파일을 만들어주기. 띄어쓰기 없애기!(중요)

2.2 db_uploader.py라고 manage.py있는 곳에 만들어 주기. 만들때 어떤 테이블을 참조하고 있을 때는 꼭 objects를 불러와서 로직을 구성해주어야함.

    for row in data_reader:
        departure_location  = Location.objects.get(name=row[0])
        arrival_location    = Location.objects.get(name=row[1])
        departure_time      = datetime.datetime.strptime(row[2], "%H:%M")
        arrival_time        = datetime.datetime.strptime(row[3], "%H:%M")
        taxi_company        = TaxiCompany.objects.get(id=row[4])
        update, create      = Course.objects.update_or_create(
            departure_location=departure_location,
            arrival_location=arrival_location,
            departure_time=departure_time,
            arrival_time=arrival_time,
            taxi_company=taxi_company,
            taxi_code=row[5])

2.3 db_uploader.py에 csv 파일 넣어주기.

2.4 작동할 때는, manage.py있는 곳에 python ./db_uploader.py를 작동해서 mysql에 반영되었는지 확인해주기.

  1. 에러
    3-1.
warnings.warn("DateTimeField %s received a naive datetime (%s)"
/Users/eunhyepark/miniconda3/envs/wattataxi/lib/python3.9/site-packages/django/db/models/fields/__init__.py:1416: RuntimeWarning: DateTimeField Course.departure_time received a naive datetime (1900-01-01 20:00:00) while time zone support is active.
  warnings.warn("DateTimeField %s received a naive datetime (%s)"
  • 이런 에러가 날 때는! settings.py에 들어가서,

TIME_ZONE = 'Asia/Seoul'
USE_I18N = False
USE_L10N = False
USE_TZ = False

요렇게 바꿔주기!

3.2 db 에러, sql에러

drop database wattataxi;

드롭 후 다시 깔고 새롭게 시작 ^^

profile
개발 기록

0개의 댓글