2014-12-16 6 views
0

나는 교대로 작동하는 기계를 가지고있다. 각 기계는 서로 다른 지속 시간을 가질 수있는 자체 시프트를 가지고 있습니다. 이 장고의 모델입니다 :Django - many-to-many 관계를 통해

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()

나는 교대의 자신의 세트를 가지고 각각의 기계가 필요하고 이러한 모델은 요구 사항을 충족하지만, 그것이 최선의 해결책이 아니라고 느낀다.

이 문제를 해결하는 더 좋은 방법이 있습니까?

+1

왜 그렇게 느껴 집니까? 나는 그것이 좋게 보인다라고 생각한다 –

+0

예. 그러나 Shift 모델은 강력한 부가 가치를 가지지 않으며 데이터베이스를 더 복잡하게 만듭니다. @xyres의 대답에서 가장 좋은 해결책을 찾았습니다. 또한 Python의 Zen을 따릅니다. Simple은 복잡한 것보다 낫습니다. :) – iulian

답변

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() 

이렇게하면 기계 장치에 원하는만큼의 시프트를 추가 할 수 있습니다. 각 기계에는 고유 한 교대가 있습니다.

+0

아, MechanicalAdmin에 MachineShiftTabularInline을 추가하여 기계를 정의하는 동안 교대를 정의 할 수 있습니다. 이것은 내가 놓친 것입니다! 많은 감사합니다! – iulian

관련 문제