2017-11-20 1 views
1

"tag"열 값이 "UserBookmark"테이블의 목록에 속하는 데이터를 가져 오려고합니다.태그 모델을 사용하여 ManytoMany 관계 생성

UserBookmark.objects.filter(tag__in = ['Java','Android']) 

하지만이 검색어 세트 [] (널 세트)를 반환 내가 내 모델을 수정 한

class UserBookmark(models.Model): 
    user = models.ForeignKey(User) 
    bookmark = models.URLField() 
    tag = models.CharField(max_length = 100) 

    def __str__(self): 
     return '%i %s %s %s'%(self.id,self.user,self.bookmark,self.tag) 

테이블

<QuerySet [<UserBookmark: 21 user12 http://careers.bankofamerica.com/ [u'Java']>,<UserBookmark: 22 user12 http://aehlke.github.io/tag-it/examples.html [u'Data Science,Python']>,<UserBookmark: 23 user13 https://github.com/Azure/azure-quickstart-templates [u'Android']>, <UserBookmark: 24 user14 https://github.com/sunnykrGupta/Bigquery-series [u'Python']>, <UserBookmark: 25 user14 https://github.com/ctfs/write-ups-2017 [u'Data Analytics']>]> 

models.py에 해당 검색어와 일치하는 데이터가 않는 반면. py

class UserBookmark (models.Model) :

user = models.ForeignKey(User) 
bookmark = models.URLField() 
tags = models.ManyToManyField('Tag',blank=True) 

def __str__(self): 
    return '%i %s %s'%(self.id,self.user,self.bookmark) 

클래스 태그 (models.Model) :

이름 = models.CharField (MAX_LENGTH = 100, 독특한 = 참)

하지만 파이썬 managepy의 makemigrations 후 마이그레이션 manae.py 파이썬을 실행하면, I 이 오류가 발생합니다 :

ValueError : 필드 북마크를 변경할 수 없습니다. 북마크로 사용자 북마크. 북마크 .UserBookmark.tags - 호환 유형이 아닙니다 (M2M 입력란을 변경하거나 입력란을 변경하거나 M2M 입력란에를 추가하거나 삭제할 수 없음).

내가 여기서 뭐하는거야?

+0

모델을 보여 줄 수 있습니까? –

+0

@ ClémentDenoix 예 질문에 내 models.py를 추가했습니다. 확인하십시오. –

답변

0

어쩌면 문제는 쿼리에없는 tags__in

+0

필드 이름이 태그이고 태그가 아니기 때문에 작동하지 않습니다. –

+0

models.py 파일을 게시 할 수 있습니까 –

+0

예 질문에 추가했습니다. . –

3

를 사용하여, 복수형하려고하지만 방법으로 당신은 당신의 데이터를 저장하고 있습니다. CharField가 하나 뿐이므로 목록을 문자열로 변환하면됩니다. 따라서 레코드에는 예를 들어 리터럴 문자열 "[u'Data Science,Python']"이 포함됩니다.

이 종류의 태그를 저장하려면 태그를 별도로 저장해야합니다. 이 작업을 수행하는 한 가지 방법은 별도의 태그 모델을 설정하고 다 대다 관계를 사용하는 것입니다. 이 작업을 수행하는 다양한 타사 패키지가 있습니다 (예 : django-taggit).

+0

이것에 대해 살펴 보겠습니다. 감사합니다 :) –

+0

또한'postgreSQL'을 데이터베이스로 사용한다면'ArrayField'를 사용할 수 있습니다 : https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/fields/# arrayfield –

+0

@ ClémentDenoix 아니요 Sqlite를 사용하고 있습니다. –