是否允许用户仅注册尚未声明的班次?

时间:2015-11-09 17:13:08

标签: django

我有一份用餐的班次表:

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个可能的用餐班次。如何创建一个只显示没人采取的班次选择的视图 - 数据库中尚未组合的可能组合?

1 个答案:

答案 0 :(得分:0)

您可以执行以下操作:

class Member {
    private String memberId;
    private String dateJoined;
}

class Gang {
    private String id;
    private String name;
    private List<Member> members;
    private String anthem;
    private String logo;
}

class Test {

    public static void main(String[] args) {
        String result = "<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"no\"?><Gang><id>435dfb3f-1129-4375-b0f9-09955d7434cc</id><name>Brew's Crews</name><members><member><memberId>d3433b1c-a93d-4af1-b698-89fcd921e48d</memberId><dateJoined/></member><member><memberId>8ac9f5bc-5710-4cb1-a75d-839e211f0286</memberId><dateJoined/></member></members><anthem/><logo>http://localhost:8080/cloud/master-index-record/raw/58338b91-2390-44a7-ac31-581c5dd921e1</logo></Gang>";

        XmlMapper xmlMapper = new XmlMapper();
        xmlMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        Object entry = xmlMapper.readValue(result, Gang.class);   
        ObjectMapper jsonMapper = new ObjectMapper();
        jsonMapper.setVisibility(PropertyAccessor.FIELD, Visibility.ANY);

        System.out.println(jsonMapper.writeValueAsString(entry));
    }

}

这将为您提供当前不在数据库中的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 ) daymeal的组合,而不会加载太多数据,或者在数据库上过于昂贵。