이런 모델 어떻게 작성해야하나요?? http://pastebin.com/TBk1gvLx

 
Han Cold Kim

이런 모델 어떻게 작성해야하나요??

http://pastebin.com/TBk1gvLx

모델을 간단하게 적어봤는데

코드에서 보시는것처럼

사람 테이블이 있고,

고객 테이블이 있습니다.

그리고 고객테이블에서 담당자(personInCharges)를 ManyToMany로 참조하였습니다.(담당자를 여러명 등록해야하고, 또한 한명의 담당자도 여러 고객 테이블의 담당자로 등록될수있음… 이럴때 다대다(n:n) 쓰는거 맞죠…?)

그리고 여기서 문제는 email필드에 담당자로 등록된 사람의 이메일을 참조해야하는데,

담당자라고 무조건 이 테이블에 들어가는게 아니라 담당자 중에서 특정 담당자의 이메일만 이 필드에 넣고 싶거든요…

이럴땐 어떻게 하나요??

그냥 같은 테이블 똑같이 참조하게 emails = models.ManyToManyField(Person, related_name=”) 이렇게 해주면 되는건가요…??

  • Seung-Hyo Seo

    그대로 선언하시고 ….
    clean_email() method 에서 적절하게 필터링을 거치시는게 나을 수도 있겠네요.

    남홍김

    특정담당자를 구분짓는게 있나요?

    Han Cold Kim

    아니요 그냥 특정 담당자는 사용자가 판단하여 정하도록 할생각입니다…

    Han Cold Kim

    @seung-hyo seo님 답변 감사합니다. 그러면 email필드를 그냥 charfield로 정의하고 clean_method로 필터링하여 insert하란 말씀이신가요?

    박정수

    저도 궁금해서 찾아봤네요. 일종의 관계 속성이 필요한 상황인 것 같네요. 고객에 담당자들을 배정하는데, 그 담당자들 중 몇몇은 이를테면 email_noti를 받아야 하는 상황처럼 보이네요.

    아래 링크를 참조해보시면 좋겠네요. 관계테이블을 장고가 자동으로 만들어주는걸 쓰지 않고 모델로 명시적으로 선언하고, 그 모델에 이 담당자가 이메일을 받을 사람인지 아닌지 체크하는 boolean 필드를 두는거죠. 그리고 manytomany 필드 설정에서 그 테이블을 지정하고요. django manytomany attribute 라는 키워드로 구글링했습니다.
    http://stackoverflow.com/questions/3368442/how-do-i-access-the-properties-of-a-many-to-many-through-table-from-a-django-t

    저렇게 관계속성으로 정의하는게 나을 수도 있고, 담당자들 대비 이메일 받는 담당자들이 sparse하다면 그냥 관계테이블을 따로 두는게 나을 수도 있겠네요.

    Seung-Hyo Seo

    Han Kim : 으흠 제가 질문에서 몇가지 놓친 것 같은데요..
    M2M 필드로 선언하시고 though 테이블을 놓으시거나 혹은…
    Intrim 모델을 하나 선언하셔서 등록하시면 될 것 같은데요..
    Person 모델을 직접 호출하는게 아니라..

    Person 모델을 상속 (혹은 참조) 하는 Manager 모델을 만드시고..
    별도의 구분 컬럼을 이용하여 고객 테이블에서 참조 하도록 하는게 좋을 것 같고요.

    말씀하셨던 것 처럼…’특정 담당자’ 라고 하셨던 부분은..

    별도의 clean() method 로 validation 하시면 될 것 같다라는 이야기 였습니다..

    남홍김

    Person이나 Client나 모두 User 라고 생각하고 만들어봤습니다. https://gist.github.com/4687990 이메일필드에 넣는거로는 안하고 그냥 따로 이메일을 추출하는 메소드를 작성했습니다.

    Han Cold Kim

    박정수님 답변감사합니다! 박정수님 답변덕분에 though 기능(?)도 알게되었네요 감사합니다 ㅎㅎ

    Han Cold Kim

    Seung-Hyo Seo님 재답변 감사합니다! 지금 계속 답변해주신 내용 참조하면서 어떻게 할지 고민중이에요!

    Han Cold Kim

    아 아직도 결론이 안났어요.. 잘모르겠네요… 아 그리고… 토요일 스터디날 김남홍님의 말씀을 듣고… 질문이 조금 부실했나 싶어 다시 한번…

    일단 다른예로 설명을 해보겠습니다.

    카드사시스템이 있습니다.

    카드 종류도 여러카드가 있고요.

    카드 종류는 간단히 체크카드, 신용카드 두 종류가 있다고 가정하고,

    고객은 신용카드도 등록할수있고 체크카드도 등록할수있습니다.

    여기서 고객정보가 담긴 고객테이블이 있고, 각각의 신용, 체크 카드 테이블이 있습니다.

    그다음 고객은 각각 카드에대해서 사용했을때 sms 알람을 받을건지 않받을껀지 선택을 할수있죠…

    그래서 A라는 고객이 체크카드에 대해서는 알람을 받지만 신용카드에 대해선 알람을 받지 않을수있고,

    B라는 고객은 체크카드에 대해서는 알람을 받지 않지만 신용카드에 대해선 알람을 받을수있고,

    C라는 고객은 알람을 모두 받고, D라는 고객은 알람을 모두 받지 않을수 있다는거죠.

    그래서 체크카드 테이블에서 sms를 받을

    위와 비슷하게,

    저의 고객-담당자 테이블에서는

    고객(카드사 시스템의 카드)이 여러 고객이 있고,

    담당자(카드사 시스템의 고객)는 여러 고객을 담당할수있어요.

    그래서 제가 원하는건 A고객의 담당자중에서

    email 알람을 받아야하는 사람의 email만 client 테이블의 email 필드에 외래키로 참조하려고 합니다!!

    ———

    이렇게 하고싶은데…

    though 속성 사용해서 별도 테이블 이용해서 하는게 적합한건가… 잘 모르겠네요…

    그냥 validation은 form class의 clean_*()으로 하고 email 필드는 charfield로 해도 관계 없을꺼 같긴한데…

    이런걸 db모델링이라고 하는건가요? 정보처리산업기사 자격증딸때 조금 보고… 해본적도 없어서… 어렵네요… 😦

    남홍김

    아마 though 속성이 아니라 through 속성 일거에요. 그리고 그냥 한기님이 생각하시는 기능에 맞게 되는대로 모델링을 해보시고 막히는 부분을 수정하는게 더 나을거에요. 물론 최적화가 안된 느낌이 들긴 하는데… 해보면서 고치는게 낫더라고요.

창업파트너를 찾습니다 개발0명 (서버,ios,안드로이드) 디자인 0명 저는 학교에서 전자

 
Hee J Song

창업파트너를 찾습니다
개발0명 (서버,ios,안드로이드)
디자인 0명

저는 학교에서 전자/경영을 공부하였구요
창업에 뜻이 있어 팀빌딩을 하고 있습니다

씨드머니는 5000 내외 이고
함께 하시는 분과 창립멤버로
지분쉐어를 통해 법인을 세울 예정입니다.

안정적으로 수익을 내거나 추가펀딩을 받기전까지는
각자 본업을 유지하는 투잡 체제로 가는 시도를 하려 합니다

당장 올인하는 부담은 없지만
본업이 될 수 있다는 마음으로,
진정성있게 와 주셨으면 좋겠고…

아래에 공감하시나요? 함께하고 싶습니다^^
– 개발/디자인능력은 있지만 혼자는 한계가 있음을 안다.
– 그래서 함께 할 팀을 찾는다
– IT서비스를 만드는것이 재미있고,
– 내가 만든 서비스를 많은 사람들이 쓰는것을 꿈꾼다
– 단시간내에 빵뜨고 사라지는 서비스보다는 시간이 지남에 따라 가치있는 서비스
– 지속가능성있는 사업에 대해 고민한다
– 내 의견이 반영되는+같이 만들어가는 회사를 통해 재미를 느끼고 싶다
– 보상을 받는다면 현재 눈앞의 이익보다는 10년후
– 내가 선택한 그 길이 맞음을 증명하여 보상받고 싶다.

아이템에 관련하여서는
팀내 의견 중 2가지 정도 선정하여
내부검토를 통해 순차적으로 진행예정입니다
저의 관심분야는 위치기반 큐레이션 SNS입니다

좀 더 자세한 이야기+
팀을 이뤄 재미있게 서비스를 만들고 싶으신 분들 있으시다면
아래로 연 부탁드립니다

sonicrev한메일
FB @heejj
TW @heej

( Django 1.3 에서 )Model A 를 상속받은 Model B,C 가 있는데 ..

 
Seung-Hyo Seo

( Django 1.3 에서 )Model A 를 상속받은 Model B,C 가 있는데 …
B,C Model 에서 A 의 특정 필드를 각기 다른 이름(verbose_name)으로 치환해서 사용 할 수 있나요?

B,C 는 각기 proxy = True Model 입니다.

  • Jaiho Lee

    이런거 얘기하시는건지.. class B(A): B._meta.get_field(‘FIELD’).verbose_name = ‘NEW’

    Seung-Hyo Seo

    Jaiho Lee : 네 …근데 해봤는데 …B,C 둘다 같은 이름으로 나오더라고요…

이흥섭님의 https://github.com/sublee/korean 를 래핑해서 djan

 
Hyun-woo Park

이흥섭님의 https://github.com/sublee/korean 를 래핑해서 django 필터를 간단히 만들어보았습니다.

  • Woojing Seok

    pypi 트위터에서 처음보고 들어갔다가 예문 보고 빵터졌습니다…
    역시 개발자와 그것은 뗄수 없는 관계인가요..

    Hyun-woo Park

    흥섭님의 korean에 아예 korean.ext.django 를 넣었으니 그걸 쓰셔도 됩니다.

    Kenial Lee

    아아 훌륭하네요. 이런 프로젝트가 있었다니!

    Lee Jun Haeng

    우와

질문있습니다! https://docs.djangoproject.com/en/1.4/ref

 
Han Cold Kim

질문있습니다!

https://docs.djangoproject.com/en/1.4/ref/models/querysets/#std:fieldlookup-exact

위 URL을 접속하시면

Entry.objects.get(id__exact=14)

위와 같은 방식으로 사용할수있는 매개변수…(?)에 대한 설명이 나오는데요,

Entry.objects.get(id__exact=14)와 Entry.objects.get(id=14) 제가 해봤을땐 결과가 완전히 같은것같은데…

혹시 다른건가요…?

  • 남홍김

    >>> Blog.objects.get(id__exact=14) # Explicit form
    >>> Blog.objects.get(id=14) # __exact is implied

    남홍김

    https://docs.djangoproject.com/en/1.4/topics/db/queries/#field-lookups 좌표는 다음과 같습니다. 따라 읽다보면 저 부분이 보이실 거에요.

    Han Cold Kim

    헉 그렇군요… 못봤네요…; 민망… ;;;; 하하핳핳핳

    남홍김

    우리에게 민망이란 없습니다! 질문하는 자여~ 영원하라! ㅋㅋㅋㅋ 저도 맨날 질문하고 다닙니다.

1.5에 바뀐 유저 모델을 스윽 봤는데 이건 아주 모델을 통체로 재정의해서 쓸수있는 수준이

 
Jung Kyoung Up

1.5에 바뀐 유저 모델을 스윽 봤는데 이건 아주 모델을 통체로 재정의해서 쓸수있는 수준이더군요.
그럴일은 딱히 없을거 같아서 그냥 예전처럼 프로필 모델 만들어 붙여쓰기로 했습니다. get_profile()함수를 일일히 안쓰는것만으로도 충분히 편한거 같습니다.

[왕초보질문] 두어 달 딴 짓 하느라 장고 공부를 못하다가 다시 돌아왔습니다. ㅠㅠ 원래

 
Jang Dongmin

[왕초보질문] 두어 달 딴 짓 하느라 장고 공부를 못하다가 다시 돌아왔습니다. ㅠㅠ
원래 잘 모르는데 그것마저 많이 잊어버리고 감각도 더 무뎌졌습니다.
오늘은 데이터를 불러와서 table을 만들려고 하는데 어려움이 있습니다.

“용돈 기입장에서 지출 항목별로 12개월의 자료를 불러와서 화면을 만들려고 합니다.”
그런데 이런 방식으로 하면 안되는 건 몇 번의 삽질 끝에 알게되었습니다.

그럼 어떻게 하나요? ㅠㅠ

  • Han Cold Kim

    MonthArchiveView를 이용해보시는건 어떠신가요??

    데이터에 date 필드가 있다면 해당 필드를 기준으로

    해당 테이블에 12월에 insert되거나 update된것을 불러올수있습니다!

    참고 URL입니다.
    http://ccbv.co.uk/projects/Django/1.4/django.views.generic.dates/MonthArchiveView/
    https://docs.djangoproject.com/en/1.5/ref/class-based-views/generic-date-based/#montharchiveview

    그리고 제가 예전에 비슷한 내용의 질문을 한적이 있습니다.

    여기도 참고해보시면 좋으실것같아요!

    https://www.facebook.com/groups/django/permalink/485126501523854/

    남홍김

    오랫만에 다시 뵙네요 웰컴! 🙂

    Jang Dongmin

    아.. Namhong Kim님 제 마지막 질문에 답해 주셨는데 그걸 못해보고 살았습니다. 생업에 쫓기면서요ㅎㅎ 근데 오늘 지난번에 말씀해주신대로 해보려고 찾으니까 제가 제 질문을 못찾겠네요 ㅠㅠ 페북은 지나간 글을 어떻게 찾는 건지원. 암튼 찾아서 꼭 해보겠습니다. 항상 고맙습니다~ㅎㅎ

    Han Kim님.. 일단 공부하고 다시 올리겠습니다. 정말 고맙습니다~

    Han Cold Kim

    검색기능이 있습니다. 오른쪽 위쪽에보면 알림버튼이 있고 톱니바퀴 버튼이 있고 돋보기 버튼이 있는데, 돋보기 버튼을 누르시고 검색하시면 됩니다! 댓글검색되 되니 기억나시는 단어 검색하시면 나오실거에요!

    Han Cold Kim

    물론 좀… 자기가 쓴 글정도는 바로 원클릭으로 나왔으면 하는데 이게 아쉽네요 ^^;

    Jang Dongmin

    아.. 검색이 되는군요ㅎㅎ 처음 알았습니다. 고맙습니다~

    남홍김

    대충 모델링을 하고서 서로 이야기를 나누는게 빠를 듯 합니다 🙂 화이팅!

    Jang Dongmin

    Namhong Kim님께서 지난 번에 알려주신 팁을 열심히 연구했습니다ㅋ 항목을 분리해내는 아이디어를 보고 감동에 감동을 받았습니다. 아주 맘에 들고 작동도 잘 됩니다ㅎㅎ
    문제는 한 페이지에 모두 나열하는 방법인데요

    다시 정리해서 말씀드리면 이렇습니다.
    1. 용돈 기입장을 만드는 중입니다.
    2. 모델은 다음과 같이 정의했습니다.

    3. total.html 페이지를 만들어서 1년 동안의 통계를 다 보고 싶습니다.
    수입 지출을 월별로 보는게 목표입니다.
    4. 이 글의 원질문이 문제가 됩니다.
    {% for p in monthly %}

    {% for q in income %}

    {{ q }}
    {% endfor %}

    {% endfor %}

    요게 안되는 건 알겠는데 이렇게 안하면 어떻게 하는건가요? ㅠㅠ
    제가 나름대로 하면 자꾸 arguement가 255개를 넘는 에러가 나서..

    Han Cold Kim

    김남홍님께서 알려주신 팁이 뭔가요? 저도 알려주세요 ㅎㅎ 저도 왠지 모르는 팁일꺼 같은데요~

    Jang Dongmin

    Han Kim님은 아마 알고 계실듯한데요?ㅎㅎ 제가 워낙 초보여서 지난번에 제가 만든 모델을 올렸더니 남홍님께서 수정해주신 거였습니다. 찾아드릴려다가 그 때도 부끄러웠는데 또 부끄러울까봐 그냥ㅋㅋ

    Jang Dongmin

    참고로 view.py는 이렇게 구성했습니다.

    수입부분과 지출부분을 구별하였으므로 불러오는 것도 다르게 했고 항목 역시 따로 불러왔습니다.
    수입은 Income에서 지출은 Outcome, 항목 이름은 Category에서 불러왔습니다
    이걸 어떻게 한 페이지에 월별로 뿌려주느냐가 제 고민입니다~
    잘 부탁드립니다~

    남홍김

    models.py도 같이 붙여주시면 좀 더 수월할 거 같아요. 소스 보고서 다시 말씀드리겠습니다^^

    Jang Dongmin

    앗! model 구성은 바로 위에 올렸습니다. 아니 다시 붙이겠습니다 ㅎㅎ

    항상 고맙습니다~

    남홍김

    답변이 늦었죠? 잠시 볼일을 보다보니;; https://gist.github.com/4690654 모델을 약간 수정했습니다. 먼저 봐주세요. 기본 모델링한거에서 몇가지 의문이 들었습니다. 먼저 Member는 무엇을 의미하나요? 원래 Income 모델에 있기에 수정은 하지 않았지만 좀 더 부연설명을 해주시면 좋을거 같아요. 그리고 Outcome의 경우 executor는 아마도 동민님 가족일 거 같아서 그냥 User의 외부키로 등록했습니다. 물론 다른 방법으로 하셔도 됩니다. 여기다 글을 쓰시기 어려우면 친구 추가하고 개인 대화창으로 물어보셔도 됩니다^^

    Jang Dongmin

    Namhong Kim님 고맙습니다~ 수정해주신 모델을 보고 또 많은 걸 배웠습니다ㅎ

    처음엔 개인적인 용돈 기입장 용도로 시작했다가 후에 어떤 모임의 회계관리까지 하면 좋겠다고 생각해서 모델 컨셉에 반영한 것입니다.ㅠㅠ
    그러다보니 executor란 걸 받아둔 것인데요
    회장이나 부회장 또는 총무가 돈을 쓸 것이라 누가 쓴 것인지 밝혀두려고 만들어둔 그릇입니다
    Member 역시 그런 의도입니다. 회원가입을 받고 누가 돈을 냈는지 어떤 항목으로 돈을 낸 건지 밝히려는 생각이었습니다.
    그래서 처음엔 executor를 Member로 ForeignKey연결했었는데 문제는
    두 세 명의 지출자를 Member로 받을 필요가 없지 않을까하는 거였습니다
    그래서 별도로 만들게 되었습니다~

    1. User를 어떻게 가져다 쓸지 몰라서 아직 안쓰고 있었는데 공부해 보겠습니다.
    2. SlugField를 굳이 쓰신 이유를 여쭈어도 될까요? ㅎ
    3. help_text란 옵션을 알게 되어 정말 기쁩니다
    4. 한글 앞에 u를 꼭 붙여야되나요?ㅎ

    선생님이 든든하니 공부할 맛이 나네요^^
    고맙습니다~

    남홍김

    SlugField는 view와 url 설정을 할 때 유용합니다. http://www.example.com/category// 이런 형태로 설정할 수 있습니다. 저렇게 쓸 경우에는 SlugField(unique=True) 처럼 값이 유일하도록 설정을 해야 합니다만 카테고리니깐 서로 겹치는 일은 없겠죠.
    u를 붙이는 이유는 한글을 표현할 때 유니코드 문자열 상수(인코딩 안된 상태)로 표현하기 위해서입니다. u을 빼고 한글을 표현하면 인코딩된 스트링(장고에선 보통 utf-8)이 되는데요. 환경에 따라서 문제가 발생할 소지가 있기도 하고, 장고내에선 unicode 객체로 다루니깐 그냥 u를 붙여서 유니코드 문자열로 쓰고 있죠.

    Jang Dongmin

    아 그렇군요.
    음..구글링해서 본 어떤 사람의 글에서 SlugField가 URLField와 다른 점이 공백이라는 걸 보았습니다. 예를 들어 URLField로는 http://www.ex.com/category/income category A/처럼 공백을 사용할 수는 없기때문에 SlugField로 받아두면 http://www.ex.com/category/income-category-A처럼 가능하다..뭐 이런..
    1. 맞나요?
    2. Category 모델 안에 slug = SlugField()로 받으셨는데 그럼 이건 어떤 용도로 쓰나요? http://www.ex.com/category/donation/ 이런 식으로 주소창에 직접 쳐서 들어갈 때 편리한 건가요?
    제가 실력이 모자란게 아쉬울 뿐입니다 ㅠㅠ

    남홍김

    네 말씀하신게 맞습니다. 그런 용도로 쓰시라고 동민님 모델에 slug를 만든거에요. 장고에서 제공되는 기본 뷰(Generic View)들은 slug 혹은 pk를 이용해서 특정 데이터를 찾고 그걸 뷰에 표현합니다. 기본제공되는 어드민 어플로만 관리하신다면 큰 의미가 없긴 합니다.

    Jang Dongmin

    음..한 번도 생각해보지 않았던 slug에 대해 잘 이해하게 되었습니다~

    Jang Dongmin

    그런데 생각해보니 제 오리지널 궁금증은 아직 안풀렸네요ㅎ

    월별로 그리고 항목별로 불러와서 테이블을 만드는 메커니즘의 비밀좀 알려주세요 ㅠㅠ

    ————————–
    | 1 | 2 | 3 |
    ————————–
    | p | q | r |
    ————————–
    | s | t | u |
    ————————–
    이렇게 하고 싶습니다

    그런데
    a=[1,2,3], b=[p,q,r,s,t,u]
    {% for num in a %}

    {% for char in b %}

    {{ num }}

    {% endfor %}

    {% endfor %}
    이렇게 하면 안된다는 건 뼈저리게 알았습니다ㅋ

    그럼 어떻게 하면 되는 건가요?

    *혹시 장고 문제가 아닌가요?? 문득 이런 생각이 ㅠㅠ

    남홍김

    예를 들어 2013년 2월을 보인다고 했을때, 그 달에 포함된 항목들이 나열되면 되는건가요?

    남홍김

    위에 숫자 1, 2, 3과 p, q, r, s, t, u가 뭔지 모르겠습니다.

    Jang Dongmin

    네 말씀하신 예가 맞습니다. 2월의 모든 항목을.. 그리고 3월, 4월..이렇게 12월까지 보이려고 합니다
    제가 예를 든 리스트는 그냥 예입니다 ㅠㅠ
    a = range(1,13)
    b = sum(Income.objects.filter(….).values_list(“money”,flat=True))
    이런 식으로 받아서 쭉 뿌리겠다는 생각으로 만든 ㅡㅡ;;

    남홍김

    Jang Dongmin 모델은 다 만드셨나요? 모델을 다 만드신 후에 어드민을 통해서 입력을 해보시고, 원하는대로 모델이 만들어졌는지 확인해보세요. 그 다음에 월-항목 별로 보고 싶으시면, https://docs.djangoproject.com/en/1.4/topics/db/queries/ 이 부분을 차근차근 읽어보시면 얼추 원하시는 기능이 있으실 거에요. 최종 모델이 어떻게 생겼는지 모르기 때문에 구체적으로 알려드리는데 한계가 있습니다.