मैं जितना संभव हो उतना प्रयास करने और इसे सरल बनाने वाला हूं।Django मॉडल विरासत w/कस्टम inclusion_tags
models.py
class Person(models.Model):
name = models.CharField(max_length=255)
def getRealPerson(self):
# is there a better way to do this?
ret = None
try:
ret = self.worker
except:
try:
ret = self.retired
except:
ret = self
return ret
class Worker(Person):
salary = models.IntegerField(default=0)
class Retired(Person):
age = models.IntegerField()
उदाहरण वास्तव में कोई फर्क नहीं पड़ता के लिए मैं क्या चाहते हैं, बस यहाँ मेरे साथ जाना: कहते हैं कि मेरे पास है निम्नलिखित की सुविधा देता है। इसका उद्देश्य यह है कि मैं सभी लोगों के संदर्भ में एक मास्टर पर्सनल टेबल रख सकता हूं।
आदर्श रूप से मैं व्यक्तियों के विचार को कॉल करने में सक्षम होना चाहता हूं और प्रत्येक वर्ग प्रकार के लिए कस्टम तरीके से सूचीबद्ध प्रत्येक विशिष्ट विवरण प्राप्त करना चाहता हूं। मैं ऐसा करने के लिए एक कस्टम inclusion_tag का उपयोग करना चाहता हूँ।
people.html
{% load people_extras %}
{% for person in people %}
{% show_person person %}
{% endfor %}
people_extras.py - templatetags
from django import template
@register.inclusion_tag('worker.html')
def show_worker(person):
return {'person':person}
@register.inclusion_tag('worker.html')
def show_retired(person):
return {'person':person}
#How do I write this function and use it as the show_person person tag?
from project.app.models import Worker, Retired
def show_person(person):
person = person.getRealPerson():
if isinstance(person, Worker):
return show_worker # yes, this doesn't work.
मैं पता नहीं यह व्यक्ति प्रकार के आधार पर सही टेम्पलेट कॉल करने के लिए प्राप्त करने के लिए किया है।
मैं समझ नहीं सकता कैसे {% ifequal%} का उपयोग करते हुए इस तरह टेम्पलेट के साथ यह पूरा करने के:
{% ifequal person.getRealPerson.__class__.__name__ "Worker" %}
{% show_worker %}
...
मैं मार्ग मैं templatetags साथ ऊपर लिखा गया था। हालांकि, मुझे नहीं पता कि व्यक्ति का प्रकार निर्धारित करने के लिए तर्क कहां रखना है!
मुझे लगता है कि अंत में मैं व्यक्ति वस्तु के साथ-साथ इसके लिए एक सामान्य दृश्य का उपयोग करने में सक्षम होना चाहता हूं।
यदि ऐसा करने का एक बेहतर तरीका है, तो मैं सुझावों के लिए खुला हूं, मैं बस इसे काम करना चाहता हूं।
मैं यहाँ एक दिन से अधिक अटक गया हूं ... वास्तव में एक धक्का का उपयोग कर सकता है।
I देखें मैं इस के कस्टम टेम्पलेट टैग कार्यान्वयन पर थोड़ा उलझन में हूँ। testperson.cast() सही उप-ऑब्जेक्ट देता है, लेकिन मैं सही inclusion_tag को कॉल करने में इसका उपयोग कैसे कर सकता हूं। जिस तरह से मैंने इसे ऊपर सेट किया है, show_person को कॉल करने का कोई तरीका नहीं है (यह पंजीकृत नहीं है)। – lostincode
यही है कि मैंने दूसरे पैराग्राफ में संबोधित किया। आशा है कि इसे स्पष्ट रूप से स्पष्ट करें। –