Форма модели Django не показывает никаких данных

#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;  

Ошибка Django

Комментарии:

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)