Reputation: 127
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">
Upvotes: 0
Views: 42
Reputation: 1495
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)
Upvotes: 1