2010-05-25 17 views
6

Django वेबसाइट पर ट्यूटोरियल इस कोड से पता चलता मॉडल के लिए:Django मॉडल और अजगर वर्ग जिम्मेदार बताते हैं

from django.db import models 

class Poll(models.Model): 
    question = models.CharField(max_length=200) 
    pub_date = models.DateTimeField('date published') 

class Choice(models.Model): 
    poll = models.ForeignKey(Poll) 
    choice = models.CharField(max_length=200) 
    votes = models.IntegerField() 

अब, उन विशेषता में से प्रत्येक एक वर्ग विशेषता है, है ना? तो, वही विशेषता वर्ग के सभी उदाहरणों द्वारा साझा की जानी चाहिए।

class Poll(models.Model): 
    # ... 
    def __unicode__(self): 
     return self.question 

class Choice(models.Model): 
    # ... 
    def __unicode__(self): 
     return self.choice 

वे कक्षा से कैसे चालू था उदाहरण में विशेषताओं का जिम्मेदार बताते हैं: एक बिट के बाद, वे इस कोड को प्रस्तुत करते हैं? क्या मुझे वर्ग विशेषताओं को गलत मिला?

उत्तर

4

django/db/models.py के तहत Model कक्षा पर एक नज़र डालें। कक्षा गुण उदाहरण के लिए बदल रहे हैं की तरह

setattr(self, field.attname, val) 

एक कुछ के माध्यम से जिम्मेदार बताते हैं एक उत्कृष्ट हाथ metaclasses पर उदाहरण के रूप में पूरी फ़ाइल (ModelBase और Model वर्ग) की सिफारिश कर सकते हैं।

1

यह मेटाक्लास के साथ किया जाता है - बहुत चालाक सामान। यदि आप और जानना चाहते हैं तो मैं मार्टी अल्चिन की उत्कृष्ट पुस्तक प्रो Django की सलाह दूंगा।

1

अजगर में, एक वर्ग विशेषता हमेशा भी एक उदाहरण विशेषता है:

class C(object): 
    a = 1 
    def show_a(self): 
     print self.a # <- works 

लेकिन Django में इसे आगे तथ्य यह है कि मॉडल वर्गों विशेष metaclasses है द्वारा जटिल है, इसलिए अपनी मान्यताओं के लिए सावधान रहना!

0

एक वर्ग उदाहरण एक namespace एक शब्दकोश जो पहले स्थान पर है, जिसमें संदर्भ विशेषता की खोज कर रहे हैं के रूप में लागू है।

http://docs.python.org/reference/datamodel.html

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