Executando verificação de segurança...
1

Ajuda com projeto Django (Salvar dados no banco de dados

Olá, venho aqui buscar ajudar com um problema de salva dados de um formulário no banco de dados.
Segue o código

@login_required(login_url='authors:login', redirect_field_name='next')
def dashoard_recipe_edit(request, id):
    form = Recipe.objects.filter(
        is_published=False,
        user=request.user,
        pk=id
    ).first()
    if not form:
        raise Http404()
    form = AuthorRecipeForm(
        request.POST or None,
        instance=form
    )
    if form.is_valid():
        recipe = form.save(commit=False)

        recipe.user = request.user
        recipe.preparation_steps_is_html = False
        recipe.is_published = False

        recipe.save(comit=True)
        messages.success(request, 'Sua receita foi salva com sucesso!')
        return redirect(reverse('authors:dashboard_recipe_edit', args=('id',)))

    return render(request, 'pages/dashboard-recipe.html',
                  {'forms': form}
                  )

isso ai tá igual ao do professor, o problema é que quando eu estou lá no meu formulário e aperto em salvar os dados, ele não está salvando no banco de dados, alguém ai sabe onde eu estou errando?

edit: Já entendi o erro, ele está no form que não está validando, mas o problema agora é o porque

Carregando publicação patrocinada...
2

Mude o nome da variável "form" para "recipe" na primeira linha da view, já qué uma instância do seu model e não um form.
Sem ver o erro é difícil ajudar, mas veja se seu form no template está com method="post" e incluindo o {% csrf_token %}.

1

No curso que eu estou fazendo está form msm e está funcionando no da aula que eu estou assistindo e quanto a erros, o problema é que não aparece nenhum erro, nenhum!

2

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.

1

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.

1

Primeiramente, manda o seu html também pra gente saber como você colocou

<!-- Sem arquivos -->
<form method="POST" action="{% url "sua_url" kwargs %} >
...
<!-- Com arquivos -->
<form method="POST" action="{% url "sua_url" kwargs %} enctype="multipart/form-data" />

####
recipe.save(comit=True)
###
recepe.save(commit=True)
``
1
1
0
0