Как сохранить OneToMany в Django Admin
Это мои модели
class Author(models.Model):
full_name = models.CharField(max_length=100)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.full_name
class Book(models.Model):
title = models.CharField(max_length=100)
author = models.ForeignKey(Author, on_delete=models.CASCADE, db_column='author_id',related_name='authors',null=True,blank=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
Моя настройка администратора
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = ('id', 'full_name', 'created_at', 'updated_at')
search_fields = ['full_name']
ordering = ['-created_at']
@admin.register(Book)
class BookAdmin(admin.ModelAdmin):
list_display = ('id', 'title', 'author', 'created_at', 'updated_at')
search_fields = ['title']
list_filter = ['author__full_name']
ordering = ['-created_at']
Я хочу создать страницу автора. Я могу выбрать несколько Book
с помощью author_id = Null
. И когда я сохраню страницу, она обновит author_id
для всех выбранных Book
Пожалуйста, помогите мне
Вы можете использовать класс TabularInline
(https://docs.djangoproject.com/en/5.0/ref/contrib/admin/#working-with-many-to-many-models). Он описан для отношения M2M, но может быть применен и для обратного внешнего ключа
class BookInline(admin.TabularInline):
model = Author.authors.through # to fix after change the related_name property
extra = 0
@admin.register(Author)
class AuthorAdmin(admin.ModelAdmin):
list_display = ('id', 'full_name', 'created_at', 'updated_at')
search_fields = ['full_name']
ordering = ['-created_at']
inlines = [
BookInline,
]
Для справки, свойство related_name
в ForeignKey
- это имя свойства для доступа другого класса к данной модели, поэтому в вашем случае related_name
модели Book должно быть books