2012-01-12 29 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