📜  django 两个外键到同一模型管理错误 (1)

📅  最后修改于: 2023-12-03 15:30:29.641000             🧑  作者: Mango

Django 两个外键到同一模型管理错误

在Django中,当一个模型中有两个外键指向同一个模型时,可能会遇到以下错误:

django.core.exceptions.FieldError: Cannot resolve keyword 'xxx' into field. Choices are: ...

这个错误是因为Django默认使用外键字段的名称作为关联模型的属性名。在存在多个外键指向同一模型时,Django无法判断应该使用哪一个属性名。因此,我们需要手动指定外键所指向的关联模型的属性名。

假设我们有两个模型:AuthorBook,其中Book模型有两个外键指向Author模型。我们在管理器中定义时需要指定ForeignKeyrelated_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属性,以避免上述错误的发生。