2010-08-09 15 views
6
class Machine(models.Model): 
    name= models.CharField(max_length=120) 
    class Meta: 
     abstract = True 

class Car(Machine): 
    speed = models.IntegerField() 

class Computer(Machine) 
    ram = models.IntegerField() 

मेरा सवाल है, मैं कैसे समझ सकता हूं कि मशीन मॉडल किस प्रकार का है। इंस्टास के लिए मुझे पता है कि आने वाली क्वेरी मशीन मॉडल का एक बच्चा है, लेकिन मैं यह भी जानना चाहता हूं कि यह एक कार submodel है।Django मॉडल विरासत और प्रकार की जांच

उत्तर

11

मुझे यकीन नहीं है कि मैं आपके प्रश्न को सही तरीके से समझता हूं। यदि आप किसी दिए गए उदाहरण के प्रकार को खोजने का प्रयास कर रहे हैं तो आप अंतर्निहित type फ़ंक्शन का उपयोग कर सकते हैं।

an_object = Car(name = "foo", speed = 80) 
an_object.save() 
type(an_object) # <class 'project.app.models.Car'> 

या आप अगर an_objectCar का एक उदाहरण आप isinstance का उपयोग कर सकते है की जांच करना चाहते हैं।

isinstance(an_object, Car) # True 
0

इंस्टेंसेंस केवल तभी काम करेगा जब आप कार वर्ग को कॉल करने वाले ऑब्जेक्ट को लाएंगे। यदि आप machine.objects.all() करते हैं और बाद में जानना चाहते हैं कि कोई कार है या नहीं, तो आप क्या कर सकते हैं हैट्टर का उपयोग करें। जैसे:

o = Machine.objects.all()[0] 
print(hasattr(o, 'car')) 
संबंधित मुद्दे