我需要处理应用程序到业余体育赛事。一个事件有几个距离/子类,每个都有一些限制(年龄等)。
我的模特
class Event(models.Model):
title = models.CharField(max_length=255)
# more fields
class Klass(models.Model):
title = models.CharField(max_length=255)
capacity = models.IntegerField()
event = models.ForeignKey('Event', related_name="klasses")
# more fields
class TeamRestrictions(models.Model):
age_min = models.IntegerField()
age_max = models.IntegerField()
klass = models.OneToOneField(TeamRestrictions, related_name='restrict')
# more fields
我希望有一个用户创建新事件的页面:命名它,在其中添加几个子类以及每个子类的限制。好吧,没有这种一对一的关系,对于只有几个Klasses的Event,我可以使用FormSet。 当然,我可以将所有TeamRestrictions字段移动到Klass,但这看起来很难看。
对于这种更复杂的结构,我应该使用什么?
答案 0 :(得分:1)
您应该为每个模型创建一个表单并单独执行,或者您可以创建非常柔和的表单,它将为您完成。
此表单的字段为title
(事件),title
(Klass),capacity
,event
,age_min
...作为ForeignKey的关系字段,您必须使用ChoiceField,它将填充__init__
函数中的选项,依此类推。然后它应具有良好的清洁功能,以便它具有olny有效数据,最后是save
。您必须查看用户是否已选择字段或正在创建新字段(例如Event
的{{1}}),然后处理它们并链接并创建所有内容。但这不是最好的解决方案(即使它可以一步到位),但它是一种选择。即使你添加了一些javascript,它看起来也很棒。