2

店舗の従業員名簿を管理するために、小さな django アプリを構築しています。従業員はフリーランサーのようなもので、毎週のほぼ固定されたスケジュールがあり、平日/時間に追加のスケジュールを要求する場合があります。

私はpythonとdjangoの両方が初めてで、django adminを使用しています。

「手動で」「Turno」を追加すると、すべてが(私にとって)十分に機能します(作業割り当て、よくわかりません。おそらく英語では「Shift」でしょうか?)。

Django管理者を介して、毎週固定されたTurnosを(「手動で」1つずつではなく、すべて一度に)追加する何らかの方法が必要です。たとえば、平日、開始時刻と終了時刻、および2(または3)か月の停止日を設定します事前に...どうやって?

どんな種類の助けも素晴らしいでしょう、私はあなたに私の義務を理解するように頼んでいません.

ここに私のmodels.pyがあります:

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

1 に答える 1

2

あなたは実際にデータベースアーキテクチャの質問をしています。現在のソリューションには、労働者とシフトの 2 つの概念があり、「シフト」は特定の日付の時間間隔です。このモデルはもはや有効ではありません。

スケジュールされたシフトを導入するには、問題のドメインで「シフト」という単語の 2 つの概念をカプセル化する必要があり、この 2 つの違いがソリューションにとって重要です。

  1. 「シフト」とは、曜日の時間間隔です。
  2. 「シフトインスタンス」は、特定の日付の時間間隔です

したがって、「シフト」の名前を特定の日付に発生するという事実を反映するものに変更して、それに応じてモデルを変更してください。次に、シフトをより一般的に反映する新しいモデルを作成します。特定の日付ではなく、曜日に発生します。

したがって、労働者は週に発生する特定のシフトに関連付けることができますが、実際のシフトは自由に変えることができます。特定の日の特定のシフトにワーカーを割り当てるには、シフト インスタンスを作成します。

すべてのシフトを定期的に (毎週) ループし、次の週のシフト インスタンスを作成するプロセスを作成できます。

于 2009-11-09T03:04:25.367 に答える