我有一份用餐的班次表:
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个可能的用餐班次。如何创建一个只显示没人采取的班次选择的视图 - 数据库中尚未组合的可能组合?
答案 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
)
,day
和meal
的组合,而不会加载太多数据,或者在数据库上过于昂贵。