program story

Django 오류 메시지 "정의에 related_name 인수 추가"

inputbox 2020. 12. 7. 08:07
반응형

Django 오류 메시지 "정의에 related_name 인수 추가"


D:\zjm_code\basic_project>python manage.py syncdb
Error: One or more models did not validate:
topics.topic: Accessor for field 'content_type' clashes with related field 'Cont
entType.topic_set'. Add a related_name argument to the definition for 'content_t
ype'.
topics.topic: Accessor for field 'creator' clashes with related field 'User.crea
ted_topics'. Add a related_name argument to the definition for 'creator'.
topics.topic: Reverse query name for field 'creator' clashes with related field
'User.created_topics'. Add a related_name argument to the definition for 'creato
r'.
topicsMap.topic: Accessor for field 'content_type' clashes with related field 'C
ontentType.topic_set'. Add a related_name argument to the definition for 'conten
t_type'.
topicsMap.topic: Accessor for field 'creator' clashes with related field 'User.c
reated_topics'. Add a related_name argument to the definition for 'creator'.
topicsMap.topic: Reverse query name for field 'creator' clashes with related fie
ld 'User.created_topics'. Add a related_name argument to the definition for 'cre
ator'.

django가 고유 한 이름을 생성 할 수없는 많은 외래 키가 있습니다.

모델의 외래 키 필드 정의에 "related_name"인수를 추가하여 도움을 줄 수 있습니다. 예 :

content_type = ForeignKey(Topic, related_name='topic_content_type')

자세한 내용은 여기를 참조하십시오. http://docs.djangoproject.com/en/dev/ref/models/fields/#django.db.models.ForeignKey.related_name


예:

class Article(models.Model):
    author = models.ForeignKey('accounts.User')
    editor = models.ForeignKey('accounts.User')

Django는 accounts.User사용자와 같은 각 외래 키 관계의 인스턴스에 대해 역방향 관계를 자동으로 만들려고하기 때문에 오류가 발생합니다 user.article_set. 이 기본 방법은 모호합니다. 시겠습니까 user.article_set.all()저자 필드에 의해 관련된 사용자의 문서를 참조하거나 편집기 필드로?

해결책:

class Article(models.Model):
    author = models.ForeignKey('accounts.User', related_name='author_article_set')
    editor = models.ForeignKey('accounts.User', related_name='editor_article_set')

이제 user의 인스턴스에 user대해 두 가지 다른 관리자 메서드가 있습니다.

  1. user.author_article_set- user.author_article_set.all()작성자가 == user 인 모든 Article 객체의 Queryset을 반환합니다.

  2. user.editor_article_set- user.editor_article_set.all()편집기 == 사용자가있는 모든 기사 객체의 Queryset을 반환합니다.


"모델에 ForeignKey가있는 경우 외래 키 모델의 인스턴스는 첫 번째 모델의 모든 인스턴스를 반환하는 Manager에 액세스 할 수 있습니다. 기본적으로이 Manager의 이름은 FOO_set이며 여기서 FOO는 소스 모델 이름이며 소문자입니다."

그러나 모델에 외래 키가 두 개 이상있는 경우 django는 외래 키 관리자에 대한 고유 이름을 생성 할 수 없습니다.
모델의 외래 키 필드 정의에 "related_name"인수를 추가하여 도움을 줄 수 있습니다.

여기를 참조하십시오 : https://docs.djangoproject.com/en/dev/topics/db/queries/#following-relationships-backward


하지만 내 경우에는 내가 같은 모델 이름과 필드 (복사 / 붙여 넣기) 일부 기능에 대해 별도의 응용 프로그램을 만들이기 때문에 이러한 유형의 오류의의가) 발생 난 그냥 오래된 모델을 삭제하고 코드는 잘 작동합니다
전체 도움이 될 수 있습니다 나 같은 초보자를 위해 :)


모델이 동일한 상위 모델에서 상속되는 related_name경우 상위의 ForeignKey 에서 고유 한 값을 설정해야합니다 . 예를 들면 :

author = models.ForeignKey('accounts.User', related_name='%(app_label)s_%(class)s_related')

문서에 더 잘 설명되어 있습니다.


이것은 질문에 대한 궁극적 인 대답은 아니지만 누군가에게는 문제를 해결할 수 있습니다. 정말 오래된 커밋 (분리 된 헤드 상태로 이동)을 확인한 다음 코드베이스를 최신 상태로 되 돌린 후 프로젝트에서 동일한 오류가 발생했습니다. 해결책은 프로젝트의 모든 * .pyc 파일을 삭제하는 것입니다.


오류 메시지가 지시하는대로 다음을 수행하십시오.

Add a related_name argument to the definition for 'creator'.

참고URL : https://stackoverflow.com/questions/2606194/django-error-message-add-a-related-name-argument-to-the-definition

반응형