Longe de querer questionar a metodologia do seu professor, mas existem problemas nessa view. A começar pela instância do model que mencionei, tem também o "comit" faltando um "m" que só não deu erro porque seu form não passou na validação, e outras coisas que poderiam ser simplificadas, como usar o get_object_or_404 ao invés desse bloco todo.

Sobre a validação, seria legal você postar o template e o seu AuthorRecipeForm. De qualquer forma, você pode debugar na view mesmo, antes do form.is_valid() verifique o retorno do "form.errors" para ter uma ideia do que está acontecendo.

Segue o bloco

class AuthorRecipeForm(forms.ModelForm):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        add_attr(self.fields.get('preparation_steps'), 'class', 'span-2')
        add_attr(self.fields.get('cover'), 'class', 'span-2')

    class Meta:
        model = Recipe
        fields = 'title', 'description', 'preparation_time', \
            'preparation_time_unit', 'servings', 'servings_unit', \
            'preparation_steps', 'cover',
        widgets = {
            'cover': forms.FileInput(
                attrs={
                    'class': 'span-2'
                }
            ),
            'servings': forms.Select(
                choices=(
                    ('Porções', 'Porções'),
                    ('Pedaços', 'Pedaços'),
                    ('Pessoas', 'Pessoas'),
                )
            ),
            'preparation_time_unit': forms.Select(
                choices=(
                    ('Horas', 'Horas'),
                    ('Minutos', 'Minutos'),
                )
            )
        }

edit: Encontrei o erro: Estava nesse servings que estava esperando um valor numerico , mas quando eu usei o forms.Select eu comecei a passar um texto para ele fazendo com que desse erro.