Django的JSONField不接受值。

5

我为我的一个模型添加了一个 JSONField。 我想在管理面板中创建该模型的实例,但是该 JSONField 返回验证错误(输入有效的JSON)。

我应该如何解决这个问题??

模型:

class Product(models.Model):
    category = models.ManyToManyField(Category, related_name='products')
    name = models.CharField(max_length=500)
    slug = models.SlugField(max_length=500, allow_unicode=True, unique=True)
    image_1 = models.ImageField(upload_to='products_pic/%Y/%m/%d/', null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    attribute = models.JSONField(default={})
    price = models.PositiveIntegerField()
    discount = models.PositiveIntegerField(null=True, blank=True)
    available = models.BooleanField(default=True)
    popular = models.BooleanField(default=False)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    comments = GenericRelation(Comment)

    class Meta:
        ordering = ('-created',)

    def __str__(self):
        return self.name

我在管理面板中添加产品。我希望我的产品有多个属性,比如颜色,尺寸等等。使用JSON字段来实现这一点是否可行?

这是错误信息:enter image description here


你应该设置default=dict而不是default={},除非你想在所有创建的相同worker实例之间共享字典。你可能每次都想要一个新的字典,这就是当没有参数调用dict时返回的内容。 - run_the_race
1个回答

7

这不是有效的JSON。在JSON中,字符串需要用双引号包裹。你可以通过例如JSONLint.com 来验证它。它是一个有效的Python字典,但不是有效的JSON。

因此,你应该输入:

{ <b>"</b>key<b>"</b>: <b>"</b>value<b>"</b> }

如需更多信息,请查看JSON规范

我在管理面板中添加产品。我想为我的产品拥有多个属性,比如颜色、尺寸等等。使用json字段是否真的合适?

如果这些字段是固定的(即所有Product都具有的属性),那么您应该使用单独的字段,因为这样更方便过滤、制作表单等等。如果数据更加动态,通常最好利用JSON字段。


哦,谢谢。我编辑了我的问题,并在我的项目中询问了关于JSON字段使用的重要事项。请回答。 - hossein-shahsavan
我创建了一个产品,但属性字段在输出API中没有显示出来。这是什么原因? - hossein-shahsavan
@hossein-shahsavan:很可能您没有正确地序列化它... - Willem Van Onsem
是的,我忘记在序列化器中添加那个字段了。谢谢。 - hossein-shahsavan
@Williem Van Onsem。您能否请看一下我的新问题??https://stackoverflow.com/questions/65984415/programmingerror-at-admin-order-order-relation-order-order-does-not-exist-li - hossein-shahsavan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接