将Django ManyToManyField格式化为可选项

时间:2018-04-20 20:51:46

标签: django django-models django-forms django-templates django-views

我有2个问题。我有2个模型工具车和工具我从工具车到工具创建了一个ManyToMany关系,我想在购物车中添加一个或多个工具

问题1.-这是我正在尝试做的正确方法吗? 问题2.-我使用泛型类来创建Toolcart对象(CreateView),并获得一个包含Tools模型中所有内容的框。我将如何制作可选项目。我试图做makies的感觉是什么?

my models.py:

class Tools(models.Model):
    nombre = models.CharField(max_length=250)
    descripcion = models.CharField(max_length=250)
    codigo_proveedor = models.CharField(max_length=250)
    categoria = models.ForeignKey('Categorias', on_delete=models.CASCADE)
    c_minima = models.IntegerField()
    c_actual = models.IntegerField()
    proveedor = models.ForeignKey('Proveedores', on_delete=models.CASCADE)
    active = models.BooleanField()


    def __str__(self):
        return self.nombre + '   -----   ' + str(self.categoria) + '   -----    ' + str(self.c_actual)


class Toolcart(models.Model):
    designacion = models.CharField(max_length=250)
    contenido = models.ManyToManyField(Tools)
    active = models.BooleanField()

    def  __str__(self):
        return self.designacion

my views.py:

# VER CARRITO
class CarritoCreateView(CreateView):
    model = Toolcart
    template_name = 'inventory/cars_form.html'
    fields = [
        'designacion',
        'contenido',
        'active',
    ]
success_url = reverse_lazy('inventory:home')

1 个答案:

答案 0 :(得分:0)

关于问题1

是的,我认为这两个模型和ManyToManyRelationship是面对你所描述的任务的好方法。

关于问题2

你可以采取两种方式:

  1. 显示Tools的列表,其中每个工具项都有一个“添加到购物车”按钮,提交隐藏的表单(每行都有自己的隐藏表单)。

    <form method='post' action='/url/to/add/to/cart/'>
        {% csrf_token %}
        <input type='hidden' value='{{ tool.pk }}' name='tool_pk'>
        <button>add to cart</button>
    </form>
    
  2. 在巨型表单中显示Tools的列表,并让每个工具项都有一个复选框。然后,您可以使用一个按钮“将所选项目添加到购物车”,然后提交整个表单。