2013-06-20 2 views
2

foreign 키를 통해 두 개의 객체 중 하나를 가질 수있는 django 모델이 있습니다 (object1object2). 두 개의 다른 클래스는 기능면에서 거의 동일하지만 약간 다른 정보를 포함합니다. 다른 StackOverflow 질문의 제안에, 나는 파이썬 메서드 property()을 사용하여 어떤 개체가 있는지를 설정하고 가져옵니다. 다음과 같이 표시됩니다.오리 타입 두 모델에 속성 사용하기

class Master(models.Model): 
    object1=models.ForeignKey(Object1, null=True) 
    object2=models.ForeignKey(Object2, null=True) 

    def get_object(self): 
     if self.object2_id: 
      return self.object2 
     else: 
      return self.object1 

    def set_object(self, instance): 
     if isinstance(instance, Object2): 
      self.object2 = instance 
      self.object1 = None 
     else: 
      self.object2 = None 
      self.object1 = instance 

    objectInstance = property(get_object, set_object) 

이것은 클래스의 단순화 된 버전입니다. 나는 모든 것이 제대로 작동하고 있다고 생각했다. 나는 설정하고 정보를 얻을 수 있었고, 내 페이지의 여러 곳에 objectInstance에 저장된 데이터를 표시 할 수있었습니다. django-tables2를 사용하여 테이블에 정보를 표시하고 모든 정보를 표시 할 수있었습니다. 이 원인을 무엇

FieldError at /workflow/list/request/ 
Cannot resolve keyword u'objectInstance' into field. Choices are: object1, object2 

어떤 생각 : 그러나, 나는이 FieldError를 얻을 수 (제공되는 편리한 화살표를 사용하여) 데이터를 정렬하기? 또는 원인을 파악하는 데 도움이되는 코드 스 니펫은 무엇입니까?

편집 : 나는이 문제를 가진 유일한 사람이 아니에요처럼

그래서이 보인다. 이 게시물은 django-tables2에 문제가 있음을 나타냅니다. Non-queryset data ordering in django-tables2

표는 property에 저장된 정보를 표시 할 수 있지만 정렬하는 데 어려움이있는 것으로 보입니다.

답변

1

데코레이터를 사용하려면 this response을 참조하십시오.

그러나 가장 좋은 방법은 어쩌면 Generic relations

편집

을 사용하고 있습니다 : 그래서

class Master(models.Model): 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    objectInstance = generic.GenericForeignKey('content_type', 'object_id') 

, 당신은 할 수 있습니다 :이 도움이

>>> t = Master(objectInstance=Object2()) 
>>> t.save() 
>>> t.objectInstance 
<Object2: a_description> 
>>> t.objectInstance = Object1() 
>>> t.save() 
>>> t.objectInstance 
<Object1: a_description> 

희망!

+0

나는 약간 혼란 스럽습니다. 'ObjectInstance'라는 또 다른 클래스가 있어야한다고 말하는 것인가요? 그 안에 그 코드가 있고, ObjectInstance와의 외래 키 관계가 있습니까? –

+0

그게 도움이 되었습니까? – lalo

+0

본인이 직접 답변을 찾았습니다 (아래 참조). 결국 데이터 구조를 이해하지 않고 명시적인'order_by' 인수가 필요하게되는 장고 표 2에 대한 문제가되었습니다. –