Django 是否允许用户仅注册尚未申请的班次?

Django 是否允许用户仅注册尚未申请的班次?,django,Django,我有一张轮班用餐表: class mealShifts(models.Model): Sunday = "Sunday" Monday = "Monday" Tuesday = "Tuesday" Wednesday = "Wednesday" Thursday = "Thursday" Friday = "Friday" Days = ( (0, "Sunday"), (1, "Monday"),

我有一张轮班用餐表:

class mealShifts(models.Model):
    Sunday = "Sunday"
    Monday = "Monday"
    Tuesday = "Tuesday"
    Wednesday = "Wednesday"
    Thursday = "Thursday"
    Friday = "Friday"
    Days = (
        (0, "Sunday"),
        (1, "Monday"),
        (2, "Tuesday"),
        (3, "Wednesday"),
        (4, "Thursday"),
        (5, "Friday"),
        (6, "Saturday")
        )
    Breakfast = "Breakfast"
    Dinner = "Dinner"
    Meals = (
        (Breakfast, "Breakfast"),
        (Dinner, "Dinner"),
        )
    Chef = "Chef"
    Sous_Chef = "Sous-Chef"
    KP ="KP"
    Shifts = (
        (Chef, "Chef"),
        (Sous_Chef, "Sous_Chef"),
        (KP, "KP"),
        )
    assigned = models.BooleanField(default=False)
    day = models.CharField(max_length = 1, choices=Days)
    meal = models.CharField(max_length = 10, choices=Meals)
    shift = models.CharField(max_length = 10, choices=Shifts, default=KP)
    camper = models.OneToOneField(User)

class Meta:
    unique_together = ("day", "meal", "shift")

def __str__(self):
    return '%s %s %s %s'%(self.day, self.meal, self.shift, self.camper)
以下是我的观点:

@login_required(login_url='login.html')
def signup(request):
    sundayShifts = mealShifts.objects.filter(day="Sunday")
    mondayShifts = mealShifts.objects.filter(day="Monday")
    #the rest of the shifts will go here
    username = None
    context = RequestContext(request)
    if request.method == 'POST':
        form = MealForm(request.POST)
        if form.is_valid():
            shift = form.save(commit=False)
            shift.camper = request.user
            shift.save()
            return redirect('signup')
        else:
            print form.errors 
    else:
        form = MealForm()
    return render_to_response('signup.html', 
        RequestContext(request, {'form':form,'username':username, 'sundayShifts':sundayShifts, 'mondayShifts':mondayShifts},))

有42个可能的轮班用餐。如何创建一个只显示无人选择的班次的视图?数据库中还没有的可能的组合?

您可以执行以下操作:

import itertools

# Ideally, reuse these from the model some how 
day_choices = range(0, 6)
meal_choices = [Breakfast, Dinner]
shift_choices = [Chef, Sous_Chef, KP]


shift_options = itertools.product(day_choices, meal_choices, shift_choices)

avaliable_shift_choices = filter(
    lambda option: not mealShifts.objects.filter(day=options[0], meal=option[1], shift=option[2]).exists(), 
    shift_options
)

这将为您提供当前不在数据库中的
班次
的组合,而不会在数据库中加载太多数据或太贵。

怎么会有56个?是否应该是42,即7(天)*2(饭)*3(班次)?你是对的-我以前有两个kp班次。谢谢