2014-02-27 5 views
0

Hoi, 이것은 첫 번째 게시물이며 저는 장고를 처음 접했습니다. [편집 :에 "mfrom" "에서"변경 ​​일부 (XMPP 같은 다른 처리가 필요 내가python django는 하위 클래스를 부모 테이블로 사용합니다.

class Message(models.Model): 
    mfrom = models.TextField() 
    text = models.TextField() 

    def beautify(self, text): 
     '''replace emoticons with images''' 
     return text 

    def save(self, *args, **kwargs): 
     self.text = self.beautify(self.text) 
     super(Message, self).save(*args, **kwargs) 

같은 제네릭 클래스를 가지고 있고 메시지가에서 오는 몇 가지 소스가

)는 비 HTTP 요청 소스에서 나오지만 외부 스크립트에서옵니다.

그래서 나는 이제 위의 두 클래스의 저장() 메소드를 호출 MessageXMPP의 RESP에 저장 시도를 장고 경우 내가

class MessageXMPP(Message): 
    def load_from_XMPP(self, xmppmsg): 
     self.mfrom = xmppmsg.mfrom 
     self.text = xmppmsg.text 

class MessageJSON(Message): 
    def load_from_JSON(self, jsonmsg): 
     self.mfrom = jsonmsg.mfrom 
     self.text = jsonmsg.text 

같은 다른 유형에 대한 메시지의 하위 클래스를 만들 것이라고 생각했다. MessageJSON 테이블, 데이터를 Message 테이블에 저장하고 MessageXMPP 테이블을 생성하지 않고 싶습니다.

Message 객체를 생성하고 값을 복사하지 않고 하위 클래스를 Message 테이블에 쓰는 방법이 있습니까?

+0

안되가 변수로'from'를 사용, 파이썬 키워드입니다. –

+0

여기에서 답을 찾을 수 있습니다. https://docs.djangoproject.com/en/dev/topics/db/models/. 또한'두장의 장고 '에서 나는 이것에 대한 해결책을 보았지만 기억이 안납니다. 프록시 접근 방식이 어쩌면? – bgusach

+0

왜'load'라는 함수를'Message' 모델에 넣고'load_from_JSON','load_from_XMPP' 등등에 그것의 행동을 위임하지 않는가? –

답변

1

왜 여기에 모델 클래스가 다른지 이해가 안됩니다. 실제로는 다른 메소드를 가진 하나의 클래스 만 가져야합니다. 더 좋은 점은 생성 메소드이기 때문에 인스턴스화 된 Message를 리턴하는 커스텀 매니저를 정의해야한다는 것이다.

그러나 별도의 클래스를 가지고 주장하는 경우, 당신이 그들을 proxy models 그래서 그들은 자신의 테이블을 참조하지 않도록해야한다 :

class MessageJSON(Message): 
    class Meta: 
     proxy = True 
+0

감사! 내 모델은 물론 꽤 많은 메소드들로 훨씬 더 복잡해졌고 다양한 소스에 대한 코드를 하나의 클래스로 분리하지 않고 유지하고 싶습니다. 나는'proxy = True'를 시도 할 것이고 또한'Managers'를 볼 것입니다. – Maex

관련 문제