【问题标题】:Django - many-to-many through relationshipDjango - 多对多通过关系
【发布时间】:2015-02-15 08:21:36
【问题描述】:

我有轮班工作的机器。每台机器都有自己的班次,可以有不同的持续时间。这些是 Django 中的模型:

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


class Machinery(models.Model):
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=30)

    shifts = models.ManyToManyField(Shift, through='MachineryShift')


class MachineryShift(models.Model):
    machinery = models.ForeignKey('Machinery')
    shift = models.ForeignKey('Shift')

    shift_start_time = models.TimeField()
    shift_end_time = models.TimeField()

我需要每台机械都有自己的一套班次,这些模型满足要求,但感觉这不是最好的解决方案。

有没有更好的方法来解决这个问题?

【问题讨论】:

  • 你为什么会有这种感觉?我觉得还不错
  • 是的,确实如此。但是 Shift 模型没有很强的附加值,并且使数据库更加复杂。我从@xyres 的答案中找到了最佳解决方案。它也遵循 Python 之禅:简单胜于复杂。 :)

标签: django django-models many-to-many django-orm


【解决方案1】:

我认为class Shift 不是实际上 必需的。因为,它只是为了给班次命名,也可以在class MachineryShift 中完成。

class Machinery(models.Model):
    name = models.CharField(max_length=100)
    code = models.CharField(max_length=30)

class MachineryShift(models.Model):
    machinery = models.ForeignKey('Machinery')
    shift = models.Charfield(max_length=50)
    shift_start_time = models.TimeField()
    shift_end_time = models.TimeField()

这样,您可以为机器添加任意数量的班次。每台机器都有自己的一套班次。

【讨论】:

  • 哦,我可以在 MachineryAdmin 中添加 MachineShiftTabularInline,从而在定义机械时定义班次。这就是我所缺少的!非常感谢!
猜你喜欢
  • 2016-04-18
  • 1970-01-01
  • 1970-01-01
  • 2011-10-09
  • 2015-12-29
  • 1970-01-01
  • 2021-03-19
  • 2020-06-18
  • 2012-04-30
相关资源
最近更新 更多