简体   繁体   中英

Django ModelForm is not showing any data

I'm new to Django and need some help here, I want to make a page where sellers can sell your items with coupons code and customers can get these coupons. A little mix with JS and I hid the coupon, you have to "purchase" the item, so you can have it. I have 3 tables, "Produto" (Product), "Pedido" (Order) and "Cliente" (Client) and when the custumer try to "purchase" the item, it's only appearing his/her name ! Can someone help me please ?

My view.py

@login_required(login_url='login')
 def liberarForm(request, pk):
   produto = Produto.objects.get(id=pk) #The Product IDs are working in admin panel
   cliente = Cliente.objects.get(user=request.user)
   if request.method == 'POST':
    form_produto = LiberaProduto(request.POST)
    form_cliente = LiberaPedido(request.POST)
    if form_cliente.is_valid() and form_produto.is_valid():
        form_cliente.save()
        form_produto.save()
        return redirect('/')
else:
    form_produto = LiberaProduto(initial={'produto': produto}) #not working
    form_cliente = LiberaPedido(initial={'cliente': cliente})
context = {'form_cliente': form_cliente, 'form_produto': form_produto}
return render(request, "liberar.html", context)

My form.py

class LiberaPedido(ModelForm):
class Meta:
    model = Pedido
    fields = '__all__'
    exclude = ['produto', 'status', 'data_criado']


class LiberaProduto(ModelForm):
class Meta:
    model = Produto
    fields = ['nome', 'lojista', 'status', 'estoque']

My models.py

class Cliente(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
chapa = models.DecimalField(null=True, max_digits=20, decimal_places=0)
cpf = models.DecimalField(null=True, max_digits=20, decimal_places=0)
telefone = models.CharField(max_length=15, null=True)
email = models.CharField(max_length=200, null=True)
data_criado = models.DateTimeField(auto_now_add=True)

class Produto(models.Model):
STATUS = (
    ('Novo', 'Novo'),
    ('Expirado', 'Expirado'),
    ('Usado', 'Usado'),
)

lojista = models.CharField(max_length=200, null=True)
nome = models.CharField(max_length=200, null=True)
preco = models.DecimalField(null=True, max_digits=100, decimal_places=2)
cupom = models.CharField(max_length=200, null=True)
status = models.CharField(max_length=200, null=True, choices=STATUS)
desconto = models.FloatField(null=True)
estoque = models.BooleanField(verbose_name="Em estoque", default='Novo', null=True)
categorias = models.ManyToManyField(Categoria)

class Pedido(models.Model):
STATUS = (
    ('No estoque', 'No estoque'),
    ('Em rota', 'Em rota'),
    ('Entregue', 'Entregue'),
)

cliente = models.ForeignKey(Cliente, null=True, on_delete=models.SET_NULL)
produto = models.ForeignKey(Produto, null=True, on_delete=models.SET_NULL)
data_criado = models.DateTimeField(auto_now_add=True)
status = models.CharField(max_length=200, null=True, choices=STATUS, default='No Estoque')

My HTML

<form action="" method="POST">
{% csrf_token %}
    {{form_cliente.as_p}}
    {{form_produto.as_p}}


<input type="submit" value="Liberar">

Django 错误

You view code will be :-

@login_required(login_url='login')
def liberarForm(request, pk):
    produto = Produto.objects.get(id=pk) #The Product IDs are working in admin panel
    cliente = Cliente.objects.get(user=request.user)
    if request.method == 'POST':
        form_produto = LiberaProduto(request.POST)
        form_cliente = LiberaPedido(request.POST)
        if form_cliente.is_valid() and form_produto.is_valid():
            form_cliente.save()
            form_produto.save()
            return redirect('/')

    form_produto = LiberaProduto(initial={'nome': produto.nome, 'lojista': produto.lojista, 'status': produto.status}) #not working
    form_cliente = LiberaPedido(initial={'cliente': cliente})
    context = {'form_cliente': form_cliente, 'form_produto': form_produto}
    return render(request, "liberar.html", context)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM