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
대해 두 가지 다른 관리자 메서드가 있습니다.
user.author_article_set
-user.author_article_set.all()
작성자가 == user 인 모든 Article 객체의 Queryset을 반환합니다.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'.
'program story' 카테고리의 다른 글
Kotlin의 게터 및 세터 (0) | 2020.12.07 |
---|---|
Mercurial 저장소 기록에서 삭제 된 파일을 신속하게 찾으십니까? (0) | 2020.12.07 |
Linq 구별-개수 (0) | 2020.12.07 |
Rails 3 : yield / content_for 일부 기본값? (0) | 2020.12.07 |
void 함수에서 복귀 (0) | 2020.12.07 |