Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.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
Django Dict作为模型字段_Django_Django Models_Python 2.7_Django Admin - Fatal编程技术网

Django Dict作为模型字段

Django Dict作为模型字段,django,django-models,python-2.7,django-admin,Django,Django Models,Python 2.7,Django Admin,我想在模型中添加一个dict字段,在管理员界面上显示dict,并能够从管理员界面进行编辑 例如,我有一段感情 dict={'sister':rel_score,'mother':rel_score,'father':rel_score} 其中,rel_score(默认值=0)是每个关系的分数。我想将这个dict存储到我的模型中,并在admin中显示它,这样我就可以为我的admin上的每个关系分配这些rel_分数 此外,任何关于如何将分数(优先级)分配给不同元素,并根据这些分配的分数返回值的示例都

我想在模型中添加一个
dict
字段,在管理员界面上显示
dict
,并能够从管理员界面进行编辑

例如,我有一段感情

dict={'sister':rel_score,'mother':rel_score,'father':rel_score}

其中,
rel_score
(默认值=0)是每个关系的分数。我想将这个
dict
存储到我的模型中,并在admin中显示它,这样我就可以为我的admin上的每个关系分配这些rel_分数


此外,任何关于如何将分数(优先级)分配给不同元素,并根据这些分配的分数返回值的示例都非常有用。

由于基础数据库不支持这种类型的数据结构,因此不可能有DictField

您可以有一个RelationshipScore模型来存储您的关系,并有一个ForeignKey从它到现有模型(我将以user为例)。例如:

然后,可以向现有模型中添加函数以获取值:

class User(models.Model):
    def get_relationship(self, rel):
        return RelationshipScore.objects.get(relationship=rel, user=self)
    def get_lowest_relationship(self):
        return RelationshipScore.objects.filter(user=self).order_by("-score")[0]

从Django 1.8开始,postgres用户还可以选择使用


Postgres用户可以轻松使用jsonfield:

from django.db import models

from django.contrib.postgres.fields import JSONField
import json

class Yourmodel(models.Model):
    name = models.CharField()
    dict_json = JSONField(blank=True, null=True)
    def __str__(self):              
        return self.name
在您的应用程序中:

the_dict = {'a':1,'b':2}
Yourmodel.dict_json = json.dumps(the_dict)
Yourmodel.save()

这个问题可能重复的地方已经很老了。从那以后,django和可用的应用程序都发生了很大的变化,所以现在可能有了新的方法。您可以使用json字段来表示dict吗?还有json模型字段的其他应用程序:
from django.db import models

from django.contrib.postgres.fields import JSONField
import json

class Yourmodel(models.Model):
    name = models.CharField()
    dict_json = JSONField(blank=True, null=True)
    def __str__(self):              
        return self.name
the_dict = {'a':1,'b':2}
Yourmodel.dict_json = json.dumps(the_dict)
Yourmodel.save()