2013-02-12 16 views
6

मैं एक मॉडल में dict फ़ील्ड जोड़ना चाहता हूं, व्यवस्थापक पर dict प्रदर्शित करें, और इसे व्यवस्थापक से संपादित करने में सक्षम हूं।मॉडल फ़ील्ड के रूप में डिक्ट

उदाहरण के लिए, मैं एक रिश्ता है

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

जहां rel_score (डिफ़ॉल्ट = 0) प्रत्येक रिश्ते के लिए स्कोर है। मैं अपने मॉडल में यह dict स्टोर करना चाहता हूं और इसे व्यवस्थापक में प्रदर्शित करना चाहता हूं, ताकि मैं अपने व्यवस्थापक पर प्रत्येक रिश्ते के लिए इन rel_score असाइन कर सकूं।

इसके अलावा, अलग-अलग तत्वों को स्कोर (प्राथमिकता) असाइन करने का तरीका और इन असाइन किए गए स्कोर के अनुसार मूल्यों को वापस करने का कोई उदाहरण वास्तव में सहायक होगा।

+1

के संभावित डुप्लिकेट [कैसे एक Django पर एक शब्दकोश स्टोर करने के लिए मॉडल?] (Http://stackoverflow.com/questions/402217/how-to-store-a-dictionary-on-a-django-model) –

+0

वह सवाल काफी पुराना है। तब से django और उपलब्ध ऐप्स दोनों बहुत बदल गए हैं, इसलिए अब नए दृष्टिकोण हो सकते हैं। –

+0

क्या आप निर्देश का प्रतिनिधित्व करने के लिए एक जेसन-फील्ड का उपयोग कर सकते हैं? https://github.com/bradjasper/django-jsonfield अन्य ऐप्स जिनके पास जेसन मॉडेलफ़िल्ड्स भी हैं: https://www.djangopackages.com/grids/g/json-fields/ –

उत्तर

2

डिकफ़ील्ड होना वास्तव में संभव नहीं है क्योंकि अंतर्निहित डेटाबेस उस प्रकार की डेटा संरचना का समर्थन नहीं करेगा।

आप अपने रिश्ते को स्टोर करने के लिए रिश्तेस्कोर मॉडल और अपने मौजूदा मॉडल में एक विदेशीकी प्राप्त कर सकते हैं (मैं उपयोगकर्ता को उदाहरण के रूप में उपयोग करूंगा)। उदाहरण के लिए:

Class RelationshipScore(models.Model): 
    user = models.ForeignKey(User) 

    relationship = models.CharField(max_length=50, primary_key=True) 
    score = models.IntegerField() 

फिर आप कार्यों के लिए अपने मौजूदा मॉडल के लिए मूल्यों को प्राप्त करने के लिए जोड़ सकते हैं: Django 1.8 के रूप में

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

, postgres उपयोगकर्ताओं को भी एक HStore field का उपयोग करने का विकल्प होता है।

A field for storing mappings of strings to strings. The Python data type used is a dict. 
0

Postgres उपयोगकर्ता jsonfield easely उपयोग कर सकते हैं:

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

संबंधित मुद्दे