2010-04-01 3 views
2

StackOverflow 스타일의 태그 입력을 내 블로그 모델에 추가하고 싶습니다. 이것은 이미 많은 데이터가있는 모델입니다. 기존 모델에 태그 추가. 이제 관리자는 어떻게 작동합니까?

class BlogPost(models.Model): 
    # my blog fields 

try: 
    tagging.register(BlogPost) 
except tagging.AlreadyRegistered: 
    pass 

은 그게 내가 블로그 게시물의 내 ​​이전 데이터베이스를 통해 갔다 (이 새로 포팅 블로그)와에 태그를 복사. 그것은 일을 내가 태그에 의해 태그와 필터를 표시 할 수 있도록 필요한 모든을 생각했다.

그러나 새로운 BlogPost를 작성하고 거기에 태그 필드가 없다는 것을 알았습니다.

문서를 읽으면 (우연히도 발한 제로 사용할만큼 건조한 상태), TagField를 발견했습니다. 이것을 생각하는 것은 기존 태그 지정 레지스터에 비해 관리자 스타일의 레이어 일뿐입니다. Tag 열이 없다고 불평했다.

태그를 입력하기위한 인터페이스를 만들기 위해 태그를 비정규 화하지 않기를 바랍니다. 모델에 설정할 수있는 TagManager 클래스가 있습니까?

tags = TagManager() # or somesuch 

답변

2

모델을 등록하는 대신 모델에서 TagField()를 사용해 보셨습니까? istruble처럼

from tagging.fields import TagField 

class BlogPost(models.Model): 
    # ... 
    tags = TagField() 
+0

나는 그것을 대신해서 생각하지 않았다. 나는 그것을 또한했다. 나는 TagField를 점검 할 것이지만 등록하지는 않을 것이다. – Oli

+0

같은 오류 : no such column : post_blogpost.tags 데이터베이스 테이블에 새로운 char 열을 추가하기를 원한다는 것을 알고 있습니다. 요점은 무엇입니까? 모든 실제 태그는 태그 추가 앱의 모델에 저장되어야합니다. 나는 이렇게 엄격한 의존성을 가지고 내 모델을 무너 뜨리고 싶지 않다. – Oli

+0

이제는 정상화를 11 번으로 돌리는 것에 대해 강하게 생각합니다. 장고를 붙이거나 장고 태그로 원하는 것을 수행하거나 자신의 태그 지정 라이브러리를 굴릴 때가 있습니다. – istruble

0

는 (죄송합니다 제가 위에서 말씀 드릴 수 없습니다) 말했다 : 당신이 모델에 TagField()를 사용하여 대신의 모델을 등록하려고 했습니까?

from tagging.fields import TagField 

class BlogPost(models.Model): 
    # ... 
    tags = TagField() 

하지만 그 후에는 데이터베이스 테이블을 변경해야합니다. 데이터베이스 백업을 권장합니다. 그런 다음 manage.py reset APPNAME을 실행하여 테이블이 어떻게 변경되었는지 확인하십시오. 백업을 복원하고 테이블을 변경하여 새 것으로 보이게하십시오. 이 방법으로 당신은 당신의 데이터를 잃지 않을 것이다;)

그리고 syncready는 테이블이 이미 존재하기 때문에 작동하지 않는다.

관련 문제