django:ValueError - 无法序列化

Posted

技术标签:

【中文标题】django:ValueError - 无法序列化【英文标题】:How can I solve "ValueError - Cannot serialize"? 【发布时间】:2022-01-23 18:35:57 【问题描述】:

我的 django 项目有错误。当我运行“python manage.py makemigrations”命令时出现错误。

ValueError: Cannot serialize: <django.db.models.query_utils.DeferredAttribute object at 0x000001B5A3078940>

models.py

class Order(models.Model):
    product = models.ForeignKey(Product, on_delete=models.CASCADE)
    customer = models.ForeignKey(Customer,
                                 on_delete=models.CASCADE, null=True, blank=True)
    quntity = models.IntegerField(default=1)
    price = models.IntegerField(default=Product.price)
    address = models.CharField(max_length=200)
    phone = models.CharField(max_length=13)
    date = models.DateTimeField(auto_now=True)
    print(Product.price)

    def __str__(self) -> str:
        return self.product.name

admin.py

from django.contrib import admin
from .models import Order

# Register your models here.


class OrderAdmin(admin.ModelAdmin):
    models = Order
    list_display =['product','customer','quntity','price','address','phone','date']

admin.site.register(Order,OrderAdmin)

这是我的错误页面:-

【问题讨论】:

【参考方案1】:

您不能为使用default=Product.price 提交的文件分配默认值

所以改变这一行

price = models.IntegerField(default=Product.price)

price = models.IntegerField(default=0)

如果你想从产品价格中设置订单价格,你可以重写 save() 方法

def save(self, *args, **kwargs):
    if self.product is not None:
        self.price = self.product.price

    super().save(*args, **kwargs)

【讨论】:

在覆盖保存方法后它的工作,但为什么会出现这个错误? 你得到同样的ValueError? 但是没有保存方法它也可以保存但是为什么要这样做 除非您手动输入订单价格,否则如果没有此保存方法,order.price 将为 0,明白了吗..?【参考方案2】:

我认为价格属性存在问题。你可以使用def save(),而不是默认的

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。

以上是关于django:ValueError - 无法序列化的主要内容,如果未能解决你的问题,请参考以下文章

Django - Celery ValueError:无法解析相关模型 u'user.User'

Django ValueError:无法查询“用户”:必须是“个人资料”实例

Django ValueError:无法将字符串转换为浮点数

ValueError:无法将大小为 5 的序列复制到维度为 2 的数组轴

ValueError:无法将大小为 5 的序列复制到维度为 2 的数组轴

Pyspark rdd.zip ValueError:无法反序列化具有不同成对项目数的 RDD