【问题标题】:wrap multiple values in single JSON and store in model - Django将多个值包装在单个 JSON 中并存储在模型中 - Django
【发布时间】:2021-05-22 01:19:00
【问题描述】:

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

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

models.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)

views.py

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')

这里我没有做表单保存方法,但是让我解释一下我想要做什么。

我想将 SIZE、COLOR、PAPER CHOICE 包装成单个 JSON 并将其存储在模型的 attribut_values 字段中但不知道该怎么做,请您解释一下。

【问题讨论】:

标签: python json django django-models model


【解决方案1】:

如果你的 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)

views.py

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 方法尝试在其中存储值(如果选择了大小),否则谢谢它也可以按我的要求工作。对于我提出的问题,它有效。
猜你喜欢
  • 2021-05-20
  • 1970-01-01
  • 2018-03-14
  • 2017-09-20
  • 1970-01-01
  • 2015-12-24
  • 2015-10-31
  • 2019-03-18
  • 1970-01-01
相关资源
最近更新 更多