Ahmed Wagdi
Ahmed Wagdi

Reputation: 4391

View didn't return an HttpResponse object. It returned None instead., when used normal form with FormView , django

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

Answers (1)

Alasdair
Alasdair

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

Related Questions