가능한 한이 방법을 시도해 보겠습니다.Django 모델 상속 w/custom 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()
예는 정말 내가 원하는, 여기 나와 함께 갈 문제가되지 않습니다 다음 내가 가지고 있다고 할 수 있습니다. 이것의 목적은 모든 사람들을 참조 할 수있는 마스터 Person 테이블을 가질 수 있도록하는 것입니다.
필자는 Person의 뷰를 호출하고 각 클래스 유형에 대해 사용자 정의 방식으로 나열된 특정 세부 정보를 갖기를 원합니다. 이 작업을 수행하려면 사용자 정의 inclusion_tag를 사용하고 싶습니다.
people.html
{% load people_extras %}
{% for person in people %}
{% show_person person %}
{% endfor %}
people_extras.py은 -
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.
나는 그것이 사람의 유형에 따라 올바른 템플릿을 호출하는 방법에 아무 생각이 templatetags.
나는이 같은 {%의 ifequal의 %}를 사용하여 템플릿으로이 작업을 수행하는 방법을 알아낼 수 없습니다 :
{% ifequal person.getRealPerson.__class__.__name__ "Worker" %}
{% show_worker %}
...
나는 내가 templatetags 위에서 쓴 길을 갔다. 그러나, 나는 그 사람의 유형을 결정하는 논리를 어디에 둘 것인지 몰라!
필자는 결국 Person 객체에서 일반 뷰를 사용할 수 있기를 바랍니다.
이 작업을 수행하는 데 훨씬 좋은 방법이 있다면 제안을 받아 들일 수 있습니다. 작동하도록하고 싶습니다.
나는 하루 종일 여기 머물렀다. 정말로 밀어 넣을 수 있었다.
I를 참조하십시오. 이것에 대한 사용자 정의 템플릿 태그 구현에 약간 혼란 스럽습니다. testperson.cast()는 올바른 하위 객체를 반환하지만 올바른 inclusion_tag를 호출 할 때 어떻게 사용할 수 있습니까? 위의 설정에서 show_person을 호출 할 방법이 없습니다 (등록되지 않았습니다). – lostincode
그것이 제가 두 번째 단락에서 설명한 것입니다. 잘하면 더 명확하게 편집. –