0

모두 안녕하세요, 저는 장고와 jquery 모두 상당히 새로운데, 몇 년 동안 일반적인 oo 프로그래밍 경험 (주로 flash/flex/cf)이 있습니다. 몇 가지 모델 관계를 관리하고 사용성을 향상시키기 위해 간단한 jquery를 사용하는 스포츠 토너먼트에 대한 양식을 구현하는 최선의 방법을 찾아 내려고합니다.django 모델 관계, 양식 및 jquery 내 머리를 얻기

내 모델은 다음과 같이 :

from django.db import models 
from django.contrib.auth.models import User 
from TTHUltimate.countries.models import Country 

# Create your models here. 

class BaseItem(models.Model): 
    name = models.CharField(max_length=100) 
    description = models.TextField(blank=True, max_length=5000) 

    def __unicode__(self): 
     return self.name 

class Location(models.Model): 
    country = models.ForeignKey(Country) 
    state_province = models.CharField(max_length = 100) 
    city = models.CharField(max_length = 100) 

    def __unicode__(self): 
     return '%s, %s, %s' % (self.city,self.state_province,self.country) 

class Address(models.Model): 
    location = models.ForeignKey(Location) 
    address = models.CharField(max_length = 500) 
    postalCode = models.CharField(max_length = 20) 

    def __unicode__(self): 
     return '%s, %s %s' % (self.address, self.location.unicode(),self.postalCode) 

class Tourney(BaseItem): 
    user = models.ForeignKey(User) 
    location = models.ForeignKey(Location, verbose_name='Location') 

    startDate = models.DateField('Start Date') 
    endDate = models.DateField('End Date',blank=True,null=True) 

    # webLinks = models.ManyToManyField(WebLinkItem, verbose_name='Web Links') 
    # emailContacts = models.ManyToManyField(EmailContactItem, verbose_name='Email Contacts') 
    # phoneContacts = models.ManyToManyField(PhoneContactItem, verbose_name='Phone Contacts') 
    # addressItems = models.ManyToManyField(AddressItem, verbose_name='Important Addresses') 
    # scheduleItems = models.ManyToManyField(ScheduleItem, verbose_name='Schedule') 

class TourneyBaseItem(BaseItem): 
    tourney = models.ForeignKey(Tourney) 

class WebLinkItem(TourneyBaseItem): 
    url = models.URLField() 

class EmailContactItem(TourneyBaseItem): 
    email = models.EmailField() 

class PhoneContactItem(TourneyBaseItem): 
    phone = models.CharField(max_length=50) 

class AddressItem(TourneyBaseItem): 
    address = models.ForeignKey(Address) 

class ScheduleItem(TourneyBaseItem): 
    datetime = models.DateTimeField() 

내 주요 문제는 'TourneyBaseItem'를 확장 하단에있는 클래스의 마상 시합 외래 키 관계를 처리하는 방법입니다. 이 항목을 jquery 및 팝업을 통해 항목을 추가하거나 삭제할 수있는 테이블에 표시하고 싶습니다. 그러나 확실하지 않은 몇 가지 사항이 있습니다.

1. 모델 관계를 올바르게 설정 했습니까? 처음부터? 또한 주석 처리 된 행에서 볼 수 있듯이 항목 클래스에서 Tourney 외래 키 대신 ManyToMany 필드를 사용하는 아이디어를 고려했습니다. 또한 '위치'입력란을 사용하여 최선의 방법을 선택했는지 여부는 확실하지 않습니다.

2.) 장고에서이 양식을 구성하는 가장 좋은 방법은 무엇입니까? ModelForm을 가능한 한 많이 사용하여 내 필드를 정의하는 반복을 제거하기를 바랬습니다. ModelForms에서 기본 데이터와 항목 팝업을 볼 수 있지만 이전에 언급 한 외래 키 관계에서 어떻게 작동하는지 모르겠습니다. 그것들은보기에 함께 결합되어야 하는가?

3.) jquery를 사용하여 항목 목록을 관리하는 경우 어떻게 이러한 목록을 request.POST 개체에 포함시킬 수 있습니까? 나는 단순히 표의 데이터를 검토하여 제출시 숨겨진 선택 입력에 추가합니까?

읽어 주셔서 감사합니다.

-Dane

+1

산문에서 실제로 모델링하려고하는 것을 조금 더 설명 할 수 있습니까? 모델에서 큰 그림을 보는 것이 어렵습니다. – SingleNegationElimination

+0

예. 주요 수업은 Tourney입니다. Tourneys에는 이름, 설명, 사용자, 위치, 시작 날짜, 종료 날짜, 전자 메일 연락처 목록, 전화 연락처 목록, 중요한 링크 목록, 중요한 주소 목록 및 중요 목록이 있습니다. 날짜/시간 (일정). – Dane

답변

1

이 외부 키와 같이 ModelForm의를 사용하는 것이 잘입니다. Django는 기본적으로 해당 필드에 대해 목록 항목을 만들고 사용자는 적절한 항목을 선택할 수 있습니다. 생성 된 목록이 너무 길면 (예 : 사용자 필드로) 필드를 일반 키로 정렬하고 클라이언트에서 jquery를 사용하여 실제로 사용할 수있게 만들 수 있습니다.

+0

고마워, 그건 좋은 말이야. 기본 조련사 데이터 (이름, 설명, 시작 날짜, 종료 날짜 등)에 대한 모델 양식을 사용할 수있는 방법을 알지만 관계에 대해서는 아직 명확하지 않습니다. 즉, 외래 키 (위치에 대한)와 많은 사람 (예 : 내 연락처, 링크 등). 별도의 모델 양식이 위치 및 연락처, 링크 등을 추가하는 데 유용 할 수 있습니다.목록에 있지만, 내가 아직도 안개가 자욱한 부분은 주요 양식에 연결하는 방법이며, 별도의 양식이나 동적 jquery 기반 목록에서 POST 데이터로 데이터를 추가 한 다음 전체를 저장하는 방법입니다. – Dane

0

WebLinkItem, EmailContactItem, PhoneContactItem 등의 모델이 모두 TourneyBaseItem에서 상속되는 이유는 무엇입니까? 이것은 그들이 토너먼트에 FK를 가져야한다는 것을 의미합니다. 너 정말 그걸 원해?

내가 주석 처리 한 행에서 정의한대로 M2M 관계를 갖는 것이 더 좋습니다. FK 디자인에서는 두 개 이상의 다른 프로젝트에 대해 동일한 WebLinkItem을 사용할 수 없으므로 (여러 토큰에 대한 정보가 들어있는 페이지) 이해할 수 있습니다. 그것을 보는 또 다른 방법은 토너먼트가 WebLinkItem의 일부분 (또는 정의 속성)이 아니라는 것입니다.

+0

감사합니다. 나는 당신이 옳다고 생각하며, 처음에 그렇게 생각했습니다. 나는 폼을 설정하는 가장 좋은 방법을 알아 내려고 할 때 혼란 스러울 지 모르지만 그 모델을 어떻게 적용하는지는 실수입니다. – Dane