#javascript #python #html #django
Вопрос:
Я новичок в Django и нуждаюсь в некоторой помощи здесь, я хочу создать страницу, где продавцы могут продавать ваши товары с кодом купона, а клиенты могут получать эти купоны. Немного смешавшись с JS, и я спрятал купон, вы должны «купить» товар, чтобы вы могли его получить. У меня есть 3 таблицы: «Produto» (Продукт), «Педидо» (Заказ) и «Клиент» (Клиент), и когда покупатель пытается «купить» товар, появляется только его/ее имя ! Кто-нибудь может мне помочь, пожалуйста ?
Мой 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)
Мой 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']
Мой 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')
Мой HTML
lt;form action="" method="POST"gt; {% csrf_token %} {{form_cliente.as_p}} {{form_produto.as_p}} lt;input type="submit" value="Liberar"gt;
Комментарии:
1. В вашей модели нет имени поля, как
produto
в вашейProduto
модели, если вы хотите, чтобы определенное значение заполнялось автоматически, передайте эти значения в форму инициализации.
Ответ №1:
Вы просматриваете код, который будет :-
@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)