2012-01-12 51 views
0

我需要一个模型,它将链接到最多3个数据(相同类型)。Django - 对于有限的相关数据,哪个模型

下面是一个例子:
我有需要通过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() 
+0

这种取决于你实际上要*放*在这些领域。你能举一些例子数据吗? – Nate 2012-01-12 10:44:00

回答

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选项。

+0

好多了。但是,我不打算在任何地方使用'ModelFormset'。你知道我怎么能限制这个对象?也许有一个'经理'或什么的。 – 2012-01-12 11:17:55

+1

@Glide你可以检查'save'方法中的步骤数量,这很简单,但是会增加一个额外的数据库。或者你可以在'Candidate'模型中添加'steps_num'字段并用信号更新它。这将是有效的,但有点非规范化。 :-)我更喜欢后者。 – DrTyrsa 2012-01-12 11:24:04