【问题标题】:Django ModelForm is not showing any dataDjango ModelForm 没有显示任何数据
【发布时间】:2021-10-26 01:55:02
【问题描述】:

我是 Django 新手,在这里需要一些帮助,我想创建一个页面,卖家可以在其中销售带有优惠券代码的商品,而客户可以获得这些优惠券。和JS稍微混合一下,我把优惠券藏起来了,你必须“购买”该物品,这样你才能拥有它。我有 3 张桌子,“Produto”(产品)、“Pedido”(订单)和“Cliente”(客户),当客户尝试“购买”该商品时,它只会显示他/她的名字!有人可以帮我吗?

我的观点.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)

我的表单.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

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


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

【问题讨论】:

  • Produto 模型中没有字段名称为 produto,如果您希望自动填充特定值,请在表单 init 中传递这些值。

标签: javascript python html django


【解决方案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)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-07-06
    • 2020-10-11
    • 2013-04-09
    • 1970-01-01
    • 2019-02-21
    • 2017-02-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多