📅  最后修改于: 2023-12-03 15:30:29.641000             🧑  作者: Mango
在Django中,当一个模型中有两个外键指向同一个模型时,可能会遇到以下错误:
django.core.exceptions.FieldError: Cannot resolve keyword 'xxx' into field. Choices are: ...
这个错误是因为Django默认使用外键字段的名称作为关联模型的属性名。在存在多个外键指向同一模型时,Django无法判断应该使用哪一个属性名。因此,我们需要手动指定外键所指向的关联模型的属性名。
假设我们有两个模型:Author
和Book
,其中Book
模型有两个外键指向Author
模型。我们在管理器中定义时需要指定ForeignKey
的related_name
属性:
class Book(models.Model):
...
author = models.ForeignKey(Author, related_name='book_as_author', on_delete=models.CASCADE)
translator = models.ForeignKey(Author, related_name='book_as_translator', on_delete=models.CASCADE)
...
通过指定不同的related_name
属性,我们可以避免上述错误。
在管理器admin.py
中添加以下代码:
from .models import Book, Author
class BookInline(admin.TabularInline):
model = Book
class AuthorAdmin(admin.ModelAdmin):
inlines = [BookInline]
# Register your models here.
admin.site.register(Author, AuthorAdmin)
当我们添加多个外键指向同一模型时,我们需要使用上述方法手动指定related_name
属性,以避免上述错误的发生。