Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Inclusão de receitas públicas

Uma feature interessante seria o superusuario poder criar receitas publicadas. Para isso, fiz duas alterações simples:

receitas.views.receita:

def cria_receita(request):
    if request.method == "POST":
        receita = Receita.objects.create(
        nome_receita = request.POST['nome_receita'],
        ingredientes = request.POST['ingredientes'],
        modo_preparo = request.POST['modo_preparo'],
        tempo_preparo = request.POST['tempo_preparo'],
        rendimento = request.POST['rendimento'],
        categoria = request.POST['categoria'],
        foto_receita = request.FILES['foto_receita'],
        pessoa = get_object_or_404(User, pk=request.user.id),
        publicada = request.POST["publicada"])
        receita.save()
        return redirect('dashboard')
    return render(request, 'receitas/cria_receita.html')

cria_receita.html

                           {% if user.is_authenticated and user.is_superuser %}
                           <div class="col-12 col-lg-3">
                             <label for="file"><b>Publicar</b></label>
                               <input type="checkbox" class="form-control"
                                                      name="publicada"
                                                      value="{{ True }}" required>
                           </div>
                           {% endif %}

Agora, o admin pode cadastrar as receitas públicas pelo próprio CRUD.

2 respostas

Legal Marcos, valeu por compartilhar com a gente.

solução!

Oii Marcos, tudo bem com você?

É uma excelente ideia =)

Tenho apenas uma consideração: desse modo como fez, o superusuario é "obrigado" a marcar o checkbox de publicar a receita quando criá-la e é interessante darmos a opção a ele de querer ou não publicar aquela receita. E para isso, é importante salientar que quando um checkbox não está marcado, a requisição não irá enviá-lo. Sendo assim, em views.py no método cria_receita , podemos fazer uma verificação simples para sabermos se a flag de publicada foi enviada ou não. Veja:

 if 'publicada' in request.POST:
            publicada = request.POST['publicada']
        else:
            publicada = False

Desse modo, caso o superusuario não marque o checkbox e envie o formulário, saberemos que o valor do mesmo é falso. Sendo assim, agora poderemos passar esse valor a criação da receita:

receita = Receita.objects.create(
            pessoa=user, 
            nome_receita=nome_receita, 
            ingredientes=ingredientes,
            modo_preparo=modo_preparo, 
            tempo_preparo=tempo_preparo, 
            rendimento=rendimento, 
            categoria=categoria,
            foto_receita=foto_receita,
            publicada=publicada
        )

Tudo bem?

Qualquer dúvida, é só falar. Estou a disposição. Abraços e bons estudos!