2009-11-08 5 views
2

매장 직원 명부를 관리하기 위해 작은 django 앱을 제작하고 있습니다. 직원은 프리랜서와 유사하며 매주 거의 고정 된 스케줄을 가지고 있으며 평일/시간대에 추가 직원을 요청할 수 있습니다.Django 관리자가 주간 단위로 데이터베이스 채우기

저는 파이썬과 django를 처음 접했고 장고 관리자를 사용하고 있습니다.

"수동으로" "Turno"를 추가하면 (작업 할당, 확실하지 않습니다. 영어로 "Shift"가 될 것입니다.) 모든 것이 공정합니다.

장고 관리를 통해 매주 고정 된 Turnos (한 번에 하나씩 "수동"이 아닌)를 추가 할 수있는 몇 가지 방법이 필요합니다. 평일, 시작 및 종료 시간 및 종료 날짜 2 또는 3 개월) 전에 ... 어떻게?

어떤 종류의 도움이 될 것입니다. 저는 여러분에게 내 의무를 다할 것을 요구하지 않습니다. 여기

from django.db import models 
from django.contrib.auth.models import User 
import datetime 

class Dia(models.Model): 
fecha = models.DateField(unique=True) 

    class Meta: 
     ordering = ['fecha'] 

    def __unicode__(self): 
     return (self.fecha.strftime('%A %d de %b de \'%y')) 

class Turno(models.Model): 
    dia = models.ForeignKey(Dia) 
    perfil_usuario = models.ForeignKey(User, verbose_name="Usuario") 
    comienza = models.TimeField() 
    finaliza = models.TimeField() 
    comentarios = models.TextField(blank=True, null=True) 

    def __unicode__(self): 
     return self.dia.fecha.strftime('%A %d de %b de \'%y') + ' - ' + self.perfil_usuario.username 

그리고 내 admin.py

from roquen.horarios.models import Turno, Dia 
from django.contrib.auth.models import User 
from django.contrib import admin 
from django import forms 

admin.site.register(Dia) 

class TurnoAdminForm(forms.ModelForm): 
    class Meta: 
     model = Turno 

    def clean_finaliza(self): 
     data = self.cleaned_data['finaliza'] 
     if data <= self.cleaned_data['comienza']: 
      raise forms.ValidationError('La hora de fin debe ser posterior a la de comienzo') 
     return data 

class TurnoAdmin(admin.ModelAdmin): 
    form = TurnoAdminForm 
    list_display = ['dia', 'perfil_usuario', 'comienza', 'finaliza'] 

admin.site.register(Turno, TurnoAdmin) 

답변

1

당신은 실제로 데이터베이스 아키텍처 질문을하고 있습니다 :

여기 내 models.py입니다. 현재 솔루션에는 근로자와 교대 근무라는 두 가지 개념이 있습니다. 예를 들어, '시프트'는 특정 시간 (예 : )입니다. 이 모델은 더 이상 유효하지 않습니다.

단어 '변화'와 둘 사이의 구분에 대한 두 가지 개념을 캡슐화해야합니다 문제의 도메인이 솔루션에 중요 일정 변화에게 소개 :

  1. A "변화"는에 시간 간격입니다 주
  2. A "시프트 예"의 일는

그래서하여 모델을 따라 변경 특정 날짜에 시간 간격입니다 특정 날짜에 발생하는 사실을 반영하는 것으로 '교대'라는 이름을 바꿉니다. 그런 다음 교대를보다 일반적으로 반영하는 새 모델을 만듭니다. 특정 날짜가 아닌 요일에 발생합니다.

그러면 일주일 동안 발생하는 특정 근무 교대와 관련 될 수 있지만 실제 근무 교대는 자유롭게 바뀔 수 있습니다. 특정 날의 특정 근무에 작업자를 지정하려면 shift-instance를 만듭니다.

모든 교대를 반복적으로 (매주) 처리하고 다음 주에 shift-instances를 만드는 프로세스를 만들 수 있습니다.

+0

우수 답변, 감사합니다. 마지막으로 언급 한 프로세스를 만들기 위해 따라야 할 stackoverflowers 중 누군가가 나를 가리킬 수 있습니까? – Pablo

+0

파이썬 스크립트를 만들어 매주 cron을 통해 실행할 수 있습니다. Django를 외부 스크립트와 함께 사용하는 방법에 대한 자세한 정보는 http://www.cotellese.net/2007/09/27/running-external-scripts-against-django-models/를 참조하십시오. – myfreeweb

관련 문제