6

我想向dict模型添加一个字段,dict在管理员上显示,并能够从管理员中编辑它。

例如,我有一个关系

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

其中rel_score(default = 0) 是每个关系的分数。我想将它存储dict到我的模型中并在管理员中显示,以便我可以为我的管理员上的每个关系分配这些 rel_score。

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

4

3 回答 3

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]
于 2015-01-20T07:59:41.793 回答
1

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

A field for storing mappings of strings to strings. The Python data type used is a dict.
于 2016-04-25T21:21:19.197 回答
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

于 2017-11-20T17:18:01.873 回答