【问题标题】:Django - Which model for a limited related dataDjango - 有限相关数据的模型
【发布时间】:2012-01-12 10:34:53
【问题描述】:

我需要一个最多可以链接到 3 个数据(相同类型)的模型。

这是一个例子:
我有候选人需要通过 3 个步骤才能被录用

class Candidate(models.Model):
  user = models.ForeignKey(User)
  step1 = models.TextField(blank=True, null=True,)
  step2 = models.TextField(blank=True, null=True,)
  step3 = models.TextField(blank=True, null=True,)

每个步骤都有几个人审查

class Review(models.Model):
  candidate = models.ForeignKey(Candidate)
  reviewer = models.ForeignKey(User)
  step1 = models.TextField(blank=True, null=True,)
  step2 = models.TextField(blank=True, null=True,)
  step3 = models.TextField(blank=True, null=True,)
  • 我是否应该分解这些对象,这会给我 4 个对象而不是 2 个对象
    例如 CandidateReviewCandidateStepReviewStep
    • 如果是,如何限制为 3 个步骤?
    • 如果没有,如何轻松地遍历这些步骤?

示例数据

obj, created = Candidate.objects.get_or_create(
  user = SelectedCandidate
, defaults = {'step1': '', 'step2': '', 'step3': ''}
)
obj.step1 = 'I\'m really motivated'
obj.step2 = 'I\'m able to do this job'
obj.save()

obj, created = Review.objects.get_or_create(
  user = request.user
, defaults = {'step1': '', 'step2': '', 'step3': ''}
)
obj.step1 = 'He seems over motivated'
obj.save()

【问题讨论】:

  • 这取决于您实际上要在这些字段中放入的内容。你能举一些例子数据吗?

标签: python django django-models


【解决方案1】:

三个对象呢:

class Candidate(models.Model):
    name = models.CharField(max_length=50)

class Step(model.Model):
    candidate = models.ForeignKey(Candidate)
    text = models.TextField(blank=True)

class Review(models.Model):
    reviewer = models.ForeignKey(User)
    step =  models.OneToOneField(Step)
    text = models.TextField(blank=True)

如何限制为 3 个步骤?

在视图级别。如果要使用ModelFromset,请使用max_num 选项。

【讨论】:

  • 这样好多了。但是,我不会到处使用ModelFormset。你知道我怎样才能在对象中限制它吗?也许用Manager 或其他东西。
  • @Glide 您可以在save 方法中检查步数,这很简单,但会增加一个 DB 命中。或者您可以在Candidate 模型中添加steps_num 字段并使用信号更新它。这将是有效的,但有点非规范化。 :-) 我更喜欢后者。
猜你喜欢
  • 2018-11-11
  • 2011-03-20
  • 1970-01-01
  • 1970-01-01
  • 2015-04-16
  • 2012-06-04
  • 2020-10-22
  • 2012-08-27
  • 2016-05-26
相关资源
最近更新 更多