Reputation: 4391
urls.py
path('shift/<int:pk>/assign/', employee_views.ShiftAssignView.as_view(), name="shift_assign"),
models.py
class Employee(models.Model):
name = models.CharField(max_length=120)
phone = models.CharField(null=True, blank=True, max_length=20)
salary = models.IntegerField(default=0)
shift = models.OneToOneField(Shift, on_delete=SET_NULL, null=True, blank=True, related_name='employee')
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('employee_details', args=[str(self.id)])
class Shift(models.Model):
branch = models.ForeignKey(Branch, on_delete=CASCADE)
start_time = models.TimeField()
end_time = models.TimeField()
def __str__(self):
return str(self.branch) + ' ( ' + str(self.start_time) + ' / ' + str(self.end_time) + ' )'
def get_absolute_url(self):
return reverse('branch_details', args=[str(self.branch.id)])
forms.py
class AssignEmployeeForm(forms.Form):
employee = forms.ModelChoiceField(queryset=Employee.objects.filter(shift__isnull=True), widget=forms.Select())
views.py
class ShiftAssignView(SuccessMessageMixin, FormView):
form_class = AssignEmployeeForm
template_name = 'back_office/assign_employee.html'
def get_context_data(self, **kwargs):
context = super(ShiftAssignView, self).get_context_data(**kwargs)
context['current_shift'] = Shift.objects.get(id=self.kwargs['pk'])
return context
def get_success_url(self):
obj = Shift.objects.get(id=self.kwargs['pk'])
return reverse_lazy('branch_details', args=[str(obj.branch_id)])
def form_valid(self, form):
employee_instance = form.cleaned_data['employee']
shift_object = Shift.objects.get(id=self.kwargs['pk'])
employee_instance.shift = shift_object
employee_instance.save()
super(ShiftAssignView, self).form_valid(form)
NOTE
The object is already being saved , but it shows this http error !
Upvotes: 0
Views: 255
Reputation: 308949
You are missing the return
in form_valid
, so the method returns None
. Change it to:
return super(ShiftAssignView, self).form_valid(form)
Upvotes: 2