MainClass的Formset< -ForeignKey< -OneToOneField?

时间:2018-02-14 06:41:47

标签: python django formset

我需要处理应用程序到业余体育赛事。一个事件有几个距离/子类,每个都有一些限制(年龄等)。

我的模特

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,但这看起来很难看。

对于这种更复杂的结构,我应该使用什么?

1 个答案:

答案 0 :(得分:1)

您应该为每个模型创建一个表单并单独执行,或者您可以创建非常柔和的表单,它将为您完成。

此表单的字段为title(事件),title(Klass),capacityeventage_min ...作为ForeignKey的关系字段,您必须使用ChoiceField,它将填充__init__函数中的选项,依此类推。然后它应具有良好的清洁功能,以便它具有olny有效数据,最后是save。您必须查看用户是否已选择字段或正在创建新字段(例如Event的{​​{1}}),然后处理它们并链接并创建所有内容。但这不是最好的解决方案(即使它可以一步到位),但它是一种选择。即使你添加了一些javascript,它看起来也很棒。