Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在单个JSON中包装多个值并存储在model-Django中_Python_Json_Django_Django Models_Model - Fatal编程技术网

Python 在单个JSON中包装多个值并存储在model-Django中

Python 在单个JSON中包装多个值并存储在model-Django中,python,json,django,django-models,model,Python,Json,Django,Django Models,Model,我想在单个JSON字段中存储多个输入 这是顺序表,有一个“attribute_field”,我想在这个字段中存储属性 作为JSON 型号.py class Order(models.Model): order_id = models.AutoField("Order ID", primary_key=True) user_id = models.ForeignKey(User, on_delete=models.CASCADE, null=False, ver

我想在单个JSON字段中存储多个输入

这是顺序表,有一个“attribute_field”,我想在这个字段中存储属性 作为JSON

型号.py

class Order(models.Model):
    order_id = models.AutoField("Order ID", primary_key=True)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, null=False, verbose_name="Customer ID")
    prod_id = models.ForeignKey(Product, on_delete=models.CASCADE, null=False, verbose_name="Product ID")
    quantity = models.ImageField('Product Quantity', max_length=10, default=500)
    attribute_value = models.CharField("Item Details JSON", max_length=2000, null=False)
    order_price = models.DecimalField(max_digits=8, decimal_places=2, default=0000.00)
def order(request, id):
    if request.method == 'POST':
        customer_id = request.user.user_id
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass

    return render(request, 'user/order.html')
def order(request, id):
    if request.method == 'POST':
        customer = request.user
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass
        order = Order.objects.filter(user=customer, prod=product_id).first()
        value = dict(size=size, Colour=Colour, Paper_Choice=Paper_Choice)
        order.attribute_value = json.dumps(value)
        order.save()

    return render(request, 'user/order.html', {'order': order})
视图.py

class Order(models.Model):
    order_id = models.AutoField("Order ID", primary_key=True)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, null=False, verbose_name="Customer ID")
    prod_id = models.ForeignKey(Product, on_delete=models.CASCADE, null=False, verbose_name="Product ID")
    quantity = models.ImageField('Product Quantity', max_length=10, default=500)
    attribute_value = models.CharField("Item Details JSON", max_length=2000, null=False)
    order_price = models.DecimalField(max_digits=8, decimal_places=2, default=0000.00)
def order(request, id):
    if request.method == 'POST':
        customer_id = request.user.user_id
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass

    return render(request, 'user/order.html')
def order(request, id):
    if request.method == 'POST':
        customer = request.user
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass
        order = Order.objects.filter(user=customer, prod=product_id).first()
        value = dict(size=size, Colour=Colour, Paper_Choice=Paper_Choice)
        order.attribute_value = json.dumps(value)
        order.save()

    return render(request, 'user/order.html', {'order': order})
这里我没有做表单保存方法,但让我解释一下我想做什么


我想包装尺寸、颜色、纸张选择为单一JSON,并将其存储在模型的Attribute_values字段中,但不知道如何做,请您向我解释。

如果您的Django版本>=3.1,您可以使用
JSONField
,否则使用
TextField
。 大概是这样的:

class Order(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Customer")
    prod = models.ForeignKey(Product, on_delete=models.CASCADE, verbose_name="Product")
    quantity = models.ImageField('Product Quantity', max_length=10, default=500)
    attribute_value = models.TextField("Item Details JSON")
    price = models.DecimalField(max_digits=8, decimal_places=2, default=0)
视图.py

class Order(models.Model):
    order_id = models.AutoField("Order ID", primary_key=True)
    user_id = models.ForeignKey(User, on_delete=models.CASCADE, null=False, verbose_name="Customer ID")
    prod_id = models.ForeignKey(Product, on_delete=models.CASCADE, null=False, verbose_name="Product ID")
    quantity = models.ImageField('Product Quantity', max_length=10, default=500)
    attribute_value = models.CharField("Item Details JSON", max_length=2000, null=False)
    order_price = models.DecimalField(max_digits=8, decimal_places=2, default=0000.00)
def order(request, id):
    if request.method == 'POST':
        customer_id = request.user.user_id
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass

    return render(request, 'user/order.html')
def order(request, id):
    if request.method == 'POST':
        customer = request.user
        product_id = id
        try:
            size = request.POST['size']
        except MultiValueDictKeyError:
            pass

        try:
            Colour = request.POST['Color']
        except MultiValueDictKeyError:
            pass

        try:
            Paper_Choice = request.POST['PaperChoice']
        except MultiValueDictKeyError:
            pass
        order = Order.objects.filter(user=customer, prod=product_id).first()
        value = dict(size=size, Colour=Colour, Paper_Choice=Paper_Choice)
        order.attribute_value = json.dumps(value)
        order.save()

    return render(request, 'user/order.html', {'order': order})

看看这是否解决了您的问题-谢谢它工作正常,但我忘了提到一件事,如果用户只选择了选择字段,那么值应该添加到属性值中,否则不会,所以我想我必须首先创建一个字典,然后使用append方法,如果选择了大小或大小,则尝试在其中存储值不用了,谢谢。它也在按我的要求工作。对于我提出的问题,它是有效的。