0

Привет всем, я довольно новичок как в django, так и в jQuery, но имею пару лет опыта программирования в общем оо (в основном 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() 

Мой главный вопрос заключается в том, чтобы иметь дело с иностранными ключевых отношений Tourney для классов в нижней части, которые простираются «TourneyBaseItem». Я бы хотел, чтобы они были представлены в таблицах, которые могут содержать элементы, добавленные и удаленные через jquery и всплывающие окна, но есть некоторые вещи, о которых я не уверен:

1.) Я правильно установил отношения модели Начать с? Я также рассмотрел идею использования полей ManyToMany в классе Tourney вместо внешнего ключа Tourney в классах предметов, как вы можете видеть из прокомментированных строк. В этом отношении я также не уверен, что я использовал наилучший подход в поле «location».

2.) Каков наилучший способ создания этой формы в Django? Я надеялся использовать ModelForm как можно больше, чтобы удалить повторение определения моих собственных полей. Я могу видеть, что передача в ModelForms для основных данных и всплывающих окон элементов, но я не уверен, как это будет работать с ранее упомянутыми отношениями внешнего ключа. Должны ли они быть собраны вместе в представлении?

3.) Если я использую jquery для управления списками элементов, как мне включить эти списки в объект request.POST? Я просто просматриваю данные в таблицах и добавляю их к скрытым избранным входам при представлении?

Спасибо за чтение.

-Dane

+1

Можете ли вы описать немного больше, в прозе, что вы на самом деле пытаетесь моделировать? Мне сложно увидеть большую картину из ваших моделей. – SingleNegationElimination

+0

Конечно. Основной класс - Tourney. В Турнирах есть имя, описание, пользователь, местоположение, дата начала, дата окончания, список контактов электронной почты, список телефонных контактов, список важных ссылок, список важных адресов и список важных даты/время (расписание). – Dane

ответ

1

Это, как правило, очень хорошо использовать ModelForm сек как с внешними ключами. Django будет создавать элементы списка по умолчанию для этих полей, и пользователи могут просто выбрать соответствующий элемент. Если сгенерированный список будет слишком длинным (например, с полем «Пользователи»), вы можете упорядочить это поле как простой ключ и использовать некоторый jquery на клиенте, чтобы сделать его фактически полезным.

+0

Спасибо, это имеет смысл. Я вижу, как я могу использовать формы моделей для основных данных турнира (имя, описание, дата начала, дата окончания и т. Д.), Но я все еще немного неясен в отношении отношений, то есть внешних ключей (для определения местоположения) и многих для manys (для моих списков контактов, ссылок и т. д.). Я вижу, как отдельная модель будет полезна для местоположений и для добавления контактов, ссылок и т. Д.к спискам, но где я все еще туманный, так это то, как я привязываю их к основной форме и как я буду добавлять данные из отдельной формы или из динамических списков, приводимых в jquery, в данные POST, а затем сохранить все это. – Dane

0

Почему модели для WebLinkItem, EmailContactItem, PhoneContactItem и т. Д. «Все наследуются от TourneyBaseItem? Это означает, что у них будет FK на турнир. Вы действительно этого хотите?

Я думаю, что лучше иметь отношения M2M, как вы определили в строках, которые вы закомментировали. Поскольку в дизайне FK вы не можете использовать один и тот же WebLinkItem для двух или более разных проектов (и это может иметь смысл - страница, содержащая информацию о нескольких турнирах). Другой способ взглянуть на это - это то, что турнир просто не является частью (или определяющим атрибутом) WebLinkItem.

+0

Спасибо, я думаю, что ты прав, и об этом я и думал. Я смутился, пытаясь понять, как лучше всего настроить форму, но это ошибка, позволяющая так влиять на то, как я делаю модели. – Dane

Смежные вопросы