2013-07-05 23 views
0

我只是想知道django招聘模式的最佳设置是什么?如何最好地设置一个招聘模型

用户可以由一个用户招募,但用户本身可能招募了许多其他用户。

是化繁为简:

class Recruiter(models.Model): 
    recruiter = models.ForeignKey(settings.AUTH_USER_MODEL) 

class Recruited(models.Model): 
    recruited = models.ForeignKey(settings.AUTH_USER_MODEL) 


class UserProfile(AbstractUser): 

    recruited_by = models.ForeignKey(Recruiter, blank=True) 
    recruited = models.ManyToManyField(Recruited, blank=True) 

    objects = UserManager() 

或者是这样做的更好的办法?

回答

1

我会做这种方式:

class Recruiter(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 

class Recruited(models.Model): 
    user = models.OneToOneField(settings.AUTH_USER_MODEL) 
    recruited_by = models.ForeignKey(Recruiter) 

由于每个招聘is用户,每招募is用户,但一个招募is recruited by一个招聘专员和一位招聘人员可以have recruited 0许多Recruiteds。在这种模式中,有一个从招聘情况一样访问暗示的回溯关系:

recruiter_instance.recruited_set 

只看到文档:
https://docs.djangoproject.com/en/1.4/ref/models/fields/#django.db.models.ForeignKey
https://docs.djangoproject.com/en/1.4/topics/db/queries/#backwards-related-objects
https://docs.djangoproject.com/en/1.4/ref/models/fields/#onetoonefield
如果您正在使用不同的Django的版本,你可以使用版本开关 - 它位于右下角的每个Django文档页面上。

+0

好吧!是否有必要在我的“UserProfile”模型中引用这些模型? –

+0

不,后向关系是隐式创建的 - 请仔细阅读我提供的文档。我假设'settings.AUTH_USER_MODEL == UserProfile'。祝你好运。 – ElmoVanKielmo

+0

太棒了!谢谢! –

1

你想要什么? 我会做到这一点:

class UserProfile(AbstractUser): 

    recruited_by = models.ForeignKey("self", blank=True, related_name="recruited") 

    objects = UserManager() 

是招聘和招募类的必需品?

+0

他可能需要额外的与招聘人员和/或招聘人员相关的数据,以防他没有为您的答案+1。 – ElmoVanKielmo

+0

如何获得用户使用此设置招募的所有人员列表? –

+0

@ Garreth00,'user_profile_instance.recruited'来访问后向关系集 - 请参阅我的答案http://stackoverflow.com/questions/17488944/how-to-best-setup-a-recruitment-model/17489127#17489127 – ElmoVanKielmo