了解django模型关系、表单和jquery
大家好,我对django和jquery都很陌生,但有几年的通用oo编程经验(主要是flash/flex/cf),我正试图找出实现体育比赛表单的最佳方法,该表单管理一些模型关系,并使用一些简单的jquery来提高可用性 我的模型是这样的:了解django模型关系、表单和jquery,jquery,django,django-models,django-templates,django-forms,Jquery,Django,Django Models,Django Templates,Django Forms,大家好,我对django和jquery都很陌生,但有几年的通用oo编程经验(主要是flash/flex/cf),我正试图找出实现体育比赛表单的最佳方法,该表单管理一些模型关系,并使用一些简单的jquery来提高可用性 我的模型是这样的: from django.db import models from django.contrib.auth.models import User from TTHUltimate.countries.models import Country # Create
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”的类的Tourney外键关系。我希望这些可以在表中表示,这些表可以通过jquery和弹出窗口添加和删除项目,但有几件事我不确定:
1.)我一开始是否正确设置了模型关系?我还考虑了在Tourney类中使用许多字段而不是在item类中使用Tourney外键的想法,正如您从注释掉的行中看到的那样。就这点而言,我也不确定我是否对“位置”字段采取了最佳方法
2.)在Django中构建此表单的最佳方式是什么?我希望尽可能多地使用ModelForm来消除定义自己字段的重复。我可以看到传递基本数据和项目弹出窗口的ModelForms,但我不确定它如何处理前面提到的外键关系。这些应该在视图中拼凑起来吗
3.)如果我正在使用jquery管理我的项目列表,那么如何将这些列表包括在request.POST对象中?我是否只是在提交时遍历表中的数据并将其添加到隐藏的select输入中
谢谢你的阅读
-Dane通常可以像外键一样使用
ModelForm
s。默认情况下,Django将为这些字段创建列表项,用户只需选择适当的项即可。如果生成的列表太长(例如,有一个用户字段),您可以将该字段安排为一个普通键,并在客户端上使用一些jquery使其实际可用。为什么WebLinkItem、EmailContactItem、PhoneContactItem等的模型都继承自TourneyBaseItem?这意味着他们将有一场FK比赛。你真的想要吗
我认为最好按照您在注释中定义的M2M关系。
因为在FK设计中,您不能将同一WebLinkItem用于2个或更多不同的项目(这可能是有意义的——一个包含多个巡回赛信息的页面)。从另一个角度来看,锦标赛并不是WebLinkItem的一部分(或定义属性)。你能用散文的形式描述一下你真正想要建模的东西吗?我很难从你们的模特身上看出全局。当然。主要课程是锦标赛。巡回赛有名称、描述、用户、位置、开始日期、结束日期、电子邮件联系人列表、电话联系人列表、重要链接列表、重要地址列表和重要日期/时间列表(时间表)。谢谢,我认为你说得对,这就是我最初的想法。当我试图找出设置表单的最佳方式时,我感到困惑,但让这种方式影响我如何创建模型是一个错误。谢谢,这很有意义。我知道如何使用基本比赛数据(姓名、描述、开始日期、结束日期等)的模型表单,但我仍然不清楚它们之间的关系,即外键(用于位置)和多对多键(用于联系人列表、链接等)。我可以看到一个单独的模型表单对于位置和向列表中添加联系人、链接等是多么有用,但我仍然不清楚的是如何将它们绑定到主表单,以及如何将来自单独表单或动态jquery驱动列表的数据添加到POST数据中,然后保存整个内容。