我想在模型中添加dict
字段,在管理员上显示dict
,并且可以从管理员进行编辑。
例如,我有一段感情
dict = { 'sister' : rel_score, 'mother' : rel_score, 'father': rel_score}
其中rel_score
(默认= 0)是每个关系的分数。我想将此dict
存储到我的模型中并将其显示在admin中,以便我可以为管理员的每个关系分配这些rel_score。
此外,如何将分数(优先级)分配给不同的元素,并根据这些分配的分数返回值将是非常有用的。
答案 0 :(得分:2)
由于底层数据库不支持这种类型的数据结构,因此不可能拥有DictField。
您可以使用RelationshipScore模型来存储您的关系,并将ForeignKey存储到您现有的模型中(我将以用户为例)。例如:
Class RelationshipScore(models.Model):
user = models.ForeignKey(User)
relationship = models.CharField(max_length=50, primary_key=True)
score = models.IntegerField()
然后,您可以向现有模型添加函数以获取值:
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]
答案 1 :(得分:1)
从Django 1.8开始,postgres用户也可以选择使用HStore field。
A field for storing mappings of strings to strings. The Python data type used is a dict.
答案 2 :(得分:0)
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()
https://docs.djangoproject.com/es/1.9/ref/contrib/postgres/fields/#jsonfield