设计工作模型的正确方法

时间:2013-05-17 01:08:08

标签: python django model

我的应用中有一个愚蠢的Job模型:

class Job(models.Model):
    # working info
    user = models.ForeignKey(User)
    company = models.CharField(max_length=100, blank=True)
    department = models.CharField(max_length=100, blank=True)
    inaugural_date = models.DateField('inaugural date', blank=True)
    resignation_date = models.DateField('resignation date', blank=True)

上面的模型正是我在我的应用程序中所拥有的,这个模型用于让用户获得他们的大学,仅此而已。

它有效,但我认为必须有更好的方法来设计这个模型,因为假设我希望在同一时间内让所有用户在同一家公司和同一个部门内工作,这并不容易。

请帮我重建这个模型,任何建议都将不胜感激!

3 个答案:

答案 0 :(得分:0)

这应该有效:

User.objects.filter(
    job_set__company__iexact="wwwww", 
    job_set__department__iexact="xxxxx",
    job_set__inaugural_date__gt=yyyy, 
    job_set__resignation_date__lt=zzzz
)

对我来说这似乎并不复杂,如果用SQL术语思考,这样的查询就不容易了,至少对我来说是这样的:)

答案 1 :(得分:0)

取决于您对增长的预测以及您使用的后端。对于关系数据库(mysql / postgres等),我会为部门和公司创建一个单独的模型,并为它们创建连接表,以便以后更轻松地完成工作。

答案 2 :(得分:0)

你的模特看起来很好。

尽管Django模型不是Anemic,但我通常将其视为纯数据结构而没有太多逻辑。所以我想

  

在同一时间段内获取同一公司和同一部门的所有用户

是一个逻辑,不应该是你的模型的关注,这也意味着,它不应该影响你的模型设计太多恕我直言。

模型应该保持简单和薄,以便可以采用和适应不同类型的逻辑。如果你试图让你的模型结构适合特定的逻辑,你很容易发现自己与膨胀模型纠缠在一起。

BTW,对于复杂查询,您可以回退到Raw SQL