>백엔드 개발 >파이썬 튜토리얼 >解决方案:django 예외.FieldError(\'관계에 여러 대상 필드가 있지만 단일 대상 필드 \'\'만 요청되었습니다\')

解决方案:django 예외.FieldError(\'관계에 여러 대상 필드가 있지만 단일 대상 필드 \'\'만 요청되었습니다\')

王林
王林앞으로
2024-02-29 22:34:021269검색

解决方案:django exceptions.FieldError(

오류 원인

FieldError("relation에 여러 대상 필드가 있지만 단일 대상 필드만 요청했습니다.") 이 오류는 일반적으로 관련 필드에 액세스하려고 할 때 발생합니다. 개체에는 실제로 여러 개의 대상 필드가 있습니다.

예를 들어 'Author' 모델과 'Book' 모델이 있고 둘 사이에 다대다 관계가 있다고 가정해 보겠습니다. 이 오류는 `Author` 개체의 `book` 필드에 액세스하려고 시도하지만 연결된 개체가 실제로 여러 `Book` 개체와 연결된 경우 발생합니다.

이 문제를 해결하려면 여러 대상 필드에 액세스하는 방법을 사용하도록 코드를 변경해야 합니다. 예를 들어, `Author.book_set.all()`을 사용하여 `Author` 객체의 모든 `Book` 객체를 가져올 수 있습니다.

위 정보가 문제 해결에 도움이 되기를 바랍니다.

해결 방법

FieldError("관계에 여러 대상 필드가 있지만 단일 대상 필드만 요청했습니다.") 오류를 해결하려면 여러 대상 필드에 액세스하는 방법을 사용하도록 코드를 변경해야 합니다. 특히 다음 방법 중 하나를 사용할 수 있습니다.

- `관련_이름` 속성을 사용하여 관련 개체에 액세스하기 위한 사용자 정의 이름을 지정합니다. 예를 들어, 다대다 관계를 정의할 때 `관련_이름='books'`를 지정한 다음 `Author.books.all()`을 사용하여 `Author` 객체의 모든 `Book` 객체를 가져올 수 있습니다.

- 관련 개체에 액세스하려면 Django의 `관련_객체` 쿼리 세트를 사용하세요. 예를 들어, `Author.관련_objects.all()`을 사용하여 `Author` 객체의 모든 관련 객체를 가져올 수 있습니다.

- DjanGo의 `through` 매개변수를 사용하여 중간 모델을 생성하고 이 중간 모델을 사용하여 관련 개체에 액세스합니다. 예를 들어 중간 모델 `BookAuthor`를 정의했다고 가정하면 `Author.bookauthor_set.all()`을 사용하여 `Author` 객체의 모든 `BookAuthor` 객체를 가져온 다음 각 `BookAuthor` 객체에 액세스할 수 있습니다. book` 필드를 사용하여 해당 `Book` 개체를 가져옵니다.

무엇이 잘못되었는지 알아내기 위해 코드를 디버그해야 할 수도 있습니다. 다음은 도움이 될 수 있는 몇 가지 단계입니다.

- 관련 필드가 올바른지 확인하세요. 예를 들어 다대다 관계를 정의하는 경우 'ForeignKey' 또는 'OneToOneField' 대신 'ManyToManyField' 필드를 사용하여 관계를 나타내야 합니다.

- 관련 개체가 올바르게 설정되었는지 확인하세요. 예를 들어 다대다 관계가 있는 경우 각 모델 사이에 `ManyToManyField` 필드를 정의하고 다른 하나를 `관련_이름` 매개변수로 지정해야 합니다.

- 연관을 표현하기 위해 중간 모델을 사용하는 경우 중간 모델을 올바르게 정의하고 올바른 `through` 매개변수를 지정했는지 확인하세요.

- 맞춤 이름을 사용하여 관련 개체에 액세스하는 경우 '관련_이름' 매개변수를 올바르게 지정했는지 확인하세요.

- Django의 디버깅 tools을 사용하여 쿼리 세트가 올바른지 확인해보세요. 예를 들어 `.query` 속성을 사용하여 생성된 sql 문을 보거나 `print(list(qs))`를 사용하여 쿼리 세트에 포함된 개체를 볼 수 있습니다.

위 정보가 도움이 되기를 바랍니다.

사용 예

다음은 'Book' 모델과 'Author' 모델이 있고 다대다 관계를 정의하여 여러 책에 여러 저자가 있을 수 있고 각 저자가 각 저자를 가질 수 있는 예입니다. 여러 권의 책을 쓸 수 있습니다:

class Author(models.Model):
name = models.CharField(max_length=100)

class Book(models.Model):
title = models.CharField(max_length=100)
authors = models.ManyToManyField(Author, related_name='books')

이제 다음을 통해 관련 객체에 액세스할 수 있습니다:

# 获取书的所有作者
book.authors.all()

# 获取作者写的所有书
author.books.all()

관계 필드를 정의할 때 잘못된 필드 유형을 사용하는 등의 문제가 발생하는 경우(예: `ManyToManyField` 대신 `ForeignKey` 사용) "관계에 대상 필드가 여러 개 있습니다." 정보와 유사한 오류가 나타날 수 있습니다. . 이 경우 코드를 확인하여 올바른 필드 유형을 사용하고 있는지 확인해야 합니다.

잘못된 이름을 사용하는 등 관련 개체에 액세스하는 데 문제가 있는 경우(예: 저자 목록을 가져오기 위해 `book.authors.all()` 대신 `book.authors`를 사용하려고 시도하는 경우) 다음과 같은 메시지가 나타날 수 있습니다. "이 메서드는 서브클래스에 의해 구현되어야 합니다"와 유사한 오류 메시지가 나타납니다. 이 경우 연결에 액세스하기 위해 올바른 방법을 사용하고 있는지 코드를 확인해야 합니다. 죄송하지만 무엇을 요구하시는지 모르겠습니다. 계속 질문하시면 답변해 드리겠습니다.

위 내용은 解决方案:django 예외.FieldError(\'관계에 여러 대상 필드가 있지만 단일 대상 필드 \'\'만 요청되었습니다\')의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 lsjlt.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제