我遇到的情况是,用户模型可能需要添加'X'个唯一字段。这些字段需要对它们运行查询,因此我不能只向其中添加包含JSON字符串的字段。例如,一个用户可能看起来像:
class User(models.Model):
name = models.CharField()
age = models.IntegerField()
sex = models.CharField()
profession = models.CharField()
下一个可能是:
class User(models.Model):
name = models.CharField()
age = models.IntegerField()
sex = models.CharField()
badge_number = models.IntegerField()
就像我上面说的那样,这些唯一字段必须是可查询的。帮助!
答案 0 :(得分:0)
如果您在Django / DB方面不是唯一的,则可以尝试使用postgres JSONField
,该字段存储JSON并且可查询。
文档中的示例代码:
from django.contrib.postgres.fields import JSONField
from django.db import models
class Dog(models.Model):
name = models.CharField(max_length=200)
data = JSONField()
def __str__(self):
return self.name
查询:
>>> Dog.objects.create(name='Rufus', data={
... 'breed': 'labrador',
... 'owner': {
... 'name': 'Bob',
... 'other_pets': [{
... 'name': 'Fishy',
... }],
... },
... })
>>> Dog.objects.create(name='Meg', data={'breed': 'collie', 'owner': None})
>>> Dog.objects.filter(data__breed='collie')
<QuerySet [<Dog: Meg>]>
答案 1 :(得分:0)
不清楚您的问题是否完全是任意的“可能存在这些字段的任何组合”,是否存在使这些可能的组合更易于处理的子集,甚至是可能的完整字段甚至是预定义的,但您可能至少具有以下选项之一。
null=True
上。继承可以使这种情况变成一种真正的痛苦,所以我会避免...对于您所描述的情况,我认为#1可能是最合适的。如果您的用例不接受null=True
,那么您的选项将变得不那么可口,可读性和可维护性。
注意:@henriquesalvaro的回答是在我撰写本文时出现的,它似乎优于以下选项。无论如何,我都会发布此消息,以防您无法使用JSONField。