Hi --
I'm working on a personal project, and have been stuck on this problem for a bit of time. There don't seem to be examples out there for editing tables with data. Is this right? Am I looking in the right places? I'm still pretty new at Django, and learning largely on my own.
I have a template wherein people can sign up for meal shifts at Burning Man. It doesn't use a form, because the table is populated with data, but until someone signs up for a shift, "camper" is set to None. The page is rendering and displaying data correctly, but when I go to add myself as a logged in user, I get the following error:
DoesNotExist at /signup/
mealShifts matching query does not exist.
Code is below. Thanks for any help.
Signup is the name of the template and the view function. mealShifts (which I know needs to be capitalized) is the name of the model.
Here's the view:
def signup_for_shift(shift_id, camper):
shift = mealShifts.objects.get(pk=shift_id)
if shift.camper is not None:
raise ValueError
shift.camper = camper
shift.save()
@login_required(login_url='login.html')
def signup(request):
model = mealShifts
user = request.user
poss_shifts = mealShifts.objects.all().order_by('day')
day_choices = range(0, 6)
meal_choices = ['Breakfast', 'Dinner']
shift_choices = ['Chef', 'Sous_Chef', 'KP']
username = None
sundayShiftsAvail = mealShifts.objects.filter(day=0, assigned=False)
sundayShiftsTaken = mealShifts.objects.filter(day=0, assigned=True)
mondayShiftsAvail = mealShifts.objects.filter(day=1, assigned=False)
mondayShiftsTaken = mealShifts.objects.filter(day=1, assigned=True)
tuesdayShiftsAvail = mealShifts.objects.filter(day=2, assigned=True)
tuesdayShiftsTaken = mealShifts.objects.filter(day=2, assigned=True)
wednesdayShiftsAvail = mealShifts.objects.filter(day=3, assigned=False)
wednesdayShiftsTaken = mealShifts.objects.filter(day=3, assigned=True)
thursdayShiftsAvail = mealShifts.objects.filter(day=4, assigned=False)
thursdayShiftsTaken = mealShifts.objects.filter(day=4, assigned=True)
fridayShiftsAvail = mealShifts.objects.filter(day=5, assigned=False)
fridayShiftsTaken = mealShifts.objects.filter(day=5, assigned=True)
saturdayShiftsAvail = mealShifts.objects.filter(day=6, assigned=False)
saturdayShiftsTaken = mealShifts.objects.filter(day=6, assigned=True)
saturdayShiftsAvail = mealShifts.objects.filter(day=7, assigned=False)
saturdayShiftsTaken = mealShifts.objects.filter(day=7, assigned=True)
if request.method == 'POST':
shift_id = request.POST.get('shift_id')
signup_for_shift(shift_id, request.user)
return redirect('signup')
context = RequestContext(request)
return render_to_response('signup.html',
RequestContext(request, {
'username':username, 'poss_shifts':poss_shifts,
'sundayShiftsAvail':sundayShiftsAvail, 'sundayShiftsTaken':sundayShiftsTaken,
'mondayShiftsTaken':mondayShiftsTaken, 'mondayShiftsAvail':mondayShiftsAvail,
'tuesdayShiftsTaken':tuesdayShiftsTaken, 'tuesdayShiftsAvail':tuesdayShiftsAvail,
'wednesdayShiftsTaken':wednesdayShiftsTaken, 'wednesdayShiftsAvail':wednesdayShiftsAvail,
'thursdayShiftsTaken':thursdayShiftsTaken, 'thursdayShiftsAvail':thursdayShiftsAvail,
'fridayShiftsTaken':fridayShiftsTaken, 'fridayShiftsAvail':fridayShiftsAvail,
'saturdayShiftsTaken':saturdayShiftsTaken, 'saturdayShiftsAvail':saturdayShiftsAvail
},))
Here is my model:
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.IntegerField(choices=Days)
meal = models.CharField(max_length = 10, choices=Meals)
shift = models.CharField(max_length = 10, choices=Shifts, default=KP)
camper = models.ForeignKey(User, null=True, blank=True, default=None)
class Meta:
unique_together = ("day", "meal", "shift")
def __str__(self):
return '%s %s %s %s %s %s'%(
self.id, self.assigned, self.day, self.meal, self.shift, self.camper)
And my template:
<div class="tablewrap">
<table class="gradienttable">
<thead>
<tr>
<th><p>Day</p></th>
<th><p>Meal</p></th>
<th><p>Shift</p></th>
<th><p>Camper</p></th>
<th><p>Camper</p></th>
</tr>
</thead>
<div class="datatables" id="shiftsTaken">
{% for shift in sundayShiftsTaken %}
<tr class="datarow hideTable">
<td>Sunday</td>
<td>{{shift.meal}}</td>
<td>{{shift.shift}}</td>
<td>{{shift.camper}}</td>
</tr>
{% endfor %}
{% for shifts in mondayShiftsTaken %}
<tr class="datarow hideTable">
<td>Monday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
</tr>
{% endfor %}
{% for shifts in tuesdayShiftsTaken %}
<tr class="datarow hideTable">
<td>Tuesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
</tr>
{% endfor %}
{% for shifts in wednesdayShiftsTaken %}
<tr class="datarow hideTable">
<td>Wednesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
</tr>
{% endfor %}
{% for shifts in thursdayShiftsTaken %}
<tr class="datarow hideTable">
<td>Thursday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
</tr>
{% endfor %}
</div>
<div class="showTable datatables" id="shiftsAvailable">
{% for shift in sundayShiftsAvail %}
<tr class="datarow showTable">
<td>Sunday</td>
<td>{{shift.meal}}</td>
<td>{{shift.shift}}</td>
<td>{{shift.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in mondayShiftsAvail %}
<tr class="datarow showTable">
<td>Monday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in tuesdayShiftsAvail %}
<tr class="datarow showTable">
<td>Tuesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in wednesdayShiftsAvail %}
<tr class="datarow showTable">
<td>Wednesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in thursdayShiftsAvail %}
<tr class="datarow showTable">
<td>Wednesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in fridayShiftsAvail %}
<tr class="datarow showTable">
<td>Wednesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
{% for shifts in saturdayShiftsAvail %}
<tr class="datarow showTable">
<td>Wednesday</td>
<td>{{shifts.meal}}</td>
<td>{{shifts.shift}}</td>
<td>{{shifts.camper}}</td>
<td>
<form method="post">
{% csrf_token %}
<div class="hiddentext">
{{shift.meal}}
{{shift.meal}}
{{shift.camper}}
</div>
<input type="submit" value="sign up">
</form>
</td>
</tr>
{% endfor %}
</div>