일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Python
- uiload
- query 최적화
- 장고
- django erp
- 장고로 ERP
- ERP
- tensorflow
- qpa_plugin
- materialized
- Self ERP
- pyside6
- django drf
- django role based
- qwindows.dll
- pyside6 ui
- orm 최적화
- django rank
- 페이지 최적화
- django
- pip 설치
- 재고 관리
- channels
- QApplication
- optimization page
- 중량 관리
- 파이썬
- django test
- test drive development
- pip 오류
- Today
- Total
취미삼아 배우는 프로그래밍
Python Django . ERP . 모델을 작성해보자. 본문
0. Foreign Key의 이해
앞서서. 모델을 잘 모른다. 모델부터 파봐야겠다.
일단 DB에 대해 겉핧기 식으로만 알기 때문에
자잘자잘한 부분은 잘 모른다.
때문에 어느정도 예제를 숙지해갈 필요가 있다.
내가 검색을 하면서 가장 난해하기도 했고, 뭐지,, 싶었던 부분이 바로
Foreign Key이다.
잘 모르기 때문에, 쓸 수 있을까? 없을까?
너무 애매하다.
그래서 Foreign Key를 먼저 써봐야 쓰거나 말거나 할 것 같다.
우선, 사전적으로는 "외부 키"라는 뜻이다.
그래. 그럼 이정도면 충분하고
일단 먼저 선코딩부터 해봐야겠다.
그냥 해보는게 최우선이다.
예제 사이트는 이곳
https://rednooby.tistory.com/88
[Django] 장고. model 모델클래스 나눠 관리하기
model클래스를 나누기 전에 Data base의 외부키(foreign key)에 대한 개념이 잡혀있으면 이해하기 쉽습니다. 1. model클래스를 나눠야하는 이유 하나의 DB 테이블이 있습니다. 이렇게 테이블을 만들다보면 후보가..
rednooby.tistory.com
의 것을 해보는걸로.
내 앱 폴더 안의 models.py 는 아주 별 것 없기 때문에
그냥 여기다가 테스트겸으로 작성한다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
|
#models.py 내용 추가.
class Candidate(models.Model):
name = models.CharField(max_length=10)
introduction = models.TextField()
area = models.CharField(max_length=15)
party_number = models.IntegerField(default=0)
class Poll(models.Model):
start_date = models.DateTimeField()
end_date = models.DateTimeField()
area = models.CharField(max_length=15)
def __str__(self):
return self.area
class Choice(models.Model):
poll = models.ForeignKey(Poll, on_delete=models.CASCADE)
Candidate = models.ForeignKey(Candidate, on_delete=models.CASCADE)
votes = models.IntegerField(default=0)
def __str__(self):
return "느낌적인 : " + str(self.poll)
|
cs |
그리고
데이터가 어떤 식으로 흘러가는지 확인코자
어드민에도 등록한다.
1
2
3
4
5
6
7
8
|
from django.contrib import admin
from modeltest.models import Candidate, Poll,Choice
# Register your models here.
admin.site.register(Candidate)
admin.site.register(Poll)
admin.site.register(Choice)
|
cs |
자 이렇게 하고 데이터를 등록하게 되면 어떻게 보일까?
자 이제 Data Migration을 진행하자.
python manage.py makemigrations
python manage.py migrate
이후 admin 페이지에서 보면..
과연 내부 데이터는 어떻게 생겨먹었을까..
#Candidate
#Candidate
#poll
하지만! Foreign key를 쓴 Choice 라면 뭔가 다르겠지!
#Choice
이상한 ---- 와 +가 앉아있는데..
#Choice
==>> Candidate도 마찬가지.
그럼 생각해보자.
이 방식을 내 쪽에도 쓸 수 있는가?
답은 Yes.
하나의 데이터에 똑같은 방식의 데이터가 조금씩 다르게 입력이 된다면?
결국 계속 복사하여 같은 것이 반복되게 될터다.
적을 수 없는 데이터도 계속 적어야 할 거고..
이 불편함을 엑셀로 표현했을 때,
nadure란 놈팽이가 [좋아하는 음식] "하나"를 적기 위해
[싫어하는 음식]과 [자주가는 가게]
를 매 번 적어 주어야 한다는 것.
즉, Foreign Key는
이 데이터 테이블을 따로 찢어서 보관할 수 있게 하는 놈이며,
적당히 쓰면 좋다.ㅡㅡㅡㅡ
는게 결론이 된다.
이걸 엑셀로 찢어서 표현하면
이런식으로 되겠다.
이렇게 되면!
누락되는 데이터는 없으며,
싫어하는 음식 하나를 넣기 위해 불필요하게 넣는 데이터 또한 없다.
음 생각보다. 상당히 괜찮은 놈이었다.
그럼 일단 내 데이터 모델을 짜봐야겠다.
1. 모델 짜기.
대충 이해하기 쉽기 위해
테이블 하나 => 시트 한 개
라고 생각을 하고 짜본다.
처음부터 너무 큰 틀을 짜려 하면,
오히려 독이 될 수 있다.
내가 듣기에
장고는 확장성 또한 유연하다 들었기 때문에,
나름 과감히 중간과정까지만 모델을 기획해봐야겠다.
(장고야 제발 유연해라. 나중에 뻘짓 안하게..)
* [생산관리]란 나름 큰 틀에서 보자면 내가 느끼기에
[생산] - > [출하]
까지의 과정이다.
이 과정에 있어서 ERP가 없던 구시대에 나름의 관리하는 독창적인 틀들이 존재했었고,
좋은 부분들도 있지만, 나쁜 부분들도 있는 그 잔재 및 문화 등 덕분에
여튼 잡일이 많다. (아씨..)
물론 틀렸다는건 아니다.
받아들이지 못하도록 하는 시대로 변했을뿐이라 생각한다.
(ex.시대가 어느 때인데..)
아무튼 엑셀로 대략적인 모델의 개요를 짜보자면,
#생산시트
#출하시트
어머나 세상에 맙소사
모델을 엑셀로만 짯을 뿐인데
벌써 하기 싫어진다.
중복되는 부분들은
위에서 확인한
Foreign key를 통해 처리한다 쳐도,
가장 문제되는 부분은
[기본제품] 부분이다.
우리 회사에 기본 제품은
기본적인 틀이되는 제품 옆에 몇 가지를 곁들여서 고객 요청에 맞게 수량을 맞추어 나가는 식이다.
파이썬식으로 표현하면
1
2
3
4
5
6
7
8
9
10
11
12
13
|
def exmaple(self):
a_example_one_product = {
'A물품':{
'+C과자':50,
'나트륨':'조금더',
'당분':'조금더',
},
'B물품':{
'A과자':20,
'탄수화물':'많이',
'지방':'무지방',
}
}
|
cs |
으로 표현된다.
이걸 어떻게 데이터로 표현하면 좋을까?
이 내용을 오롯이 Text field(그냥 텍스트)로
넣는다면,
들어가기야 들어가고
뷰로도 빼내기야 그냥 빼면 될 것 같긴 하다.
하지만 그렇게 되면,
Django의 filter 기능을 못 쓰게 되버린다.
아주 좋은 Query 기능인데..
없으면 조금 복잡해질 것 같다.
여튼 그래서,
정답은 Custom Field 였다.
그러다보니 이제는
2. Custom Field 로의 방황.
내가 찾고자 하는건 dict형식으로 표현할 수 있는 필드다.
이를 위해 여럿 검색을 해봤는데,
https://github.com/irothschild/simple-json-text-field/blob/master/fields.py
irothschild/simple-json-text-field
A simple JSON TextField for Django models. Contribute to irothschild/simple-json-text-field development by creating an account on GitHub.
github.com
라는 곳에서 어느정도 답을 찾았다.
친절히 예시까지 있었다.
위의 해당 코드를
[fields.py로 저장] 하고
모델에
1
2
3
|
class MyModel(models.Model):
name = models.CharField(max_length=100, null=True, blank=True)
foobar = SimpleJSONTextField(null=True, blank=True)
|
cs |
이렇게 작성한 뒤,
마이그레이트도 해준다.
python manage.py makemigrations
python manage.py migrate
그 뒤,
python manage.py shell
을 통해 쉘에 접속하여 아래 코드를 차근차근 넣어본다.
1
2
3
4
5
6
7
8
9
10
11
12
|
'''
My Model onthe shell:
'''
from modeltest.models import MyModel
mine, created = MyModel.objects.get_or_create(foobar={"simple": "it work!!@"})
print(mine.foobar['simple'])
'''
but mine only-> nope!
'''
|
cs |
어드민 쪽에서도 확인하는 데이터도 잘 입력되고,
mine.foobar['simple']을 통해 확인되는 데이터도 it works로 잘 나온다.
자 이러면 어느정도 재료준비는 끝난것 같다.
모델을 써보려 했는데 모델을 기획만 하고 끝났다.
오늘은 이만해야겠다.
'파이썬(장고)' 카테고리의 다른 글
django-channels-database-tableout (0) | 2019.10.31 |
---|---|
python ERP. 모델을 작성해보자.(부제: 삽질일기) (0) | 2019.10.20 |
Django 로 ERP를 만들어 보려한다. (0) | 2019.10.14 |
Django 삽질기. 그 시작. (0) | 2019.10.14 |
글 작성 테스트 (0) | 2019.09.27 |