反向内联在Django Admin for Many to Many



如果之前有人问过这个问题,并且我的搜索没有发现解决方案,请向我道歉。我希望包括两个模型的管理内联。Django版本为4.1.4

class Book(models.Model):
title = models.CharField(max_length=100)
author_series = models.CharField(max_length=100, blank=True, null=True)
series = models.ManyToManyField(Series)
...
def __str__(self):
return self.title + " (" + str(self.pk) + ")"
class Series(models.Model):
name = models.CharField(max_length=100, blank=True, null=True)
category = models.CharField(max_length=50)
publisher = models.CharField(max_length=100,blank=True, null=True)
...
def __str__(self):
return self.publisher + " " + self.name

我可以使用Model.field.through format成功完成转发关系:

class SeriesInline(admin.TabularInline):
model = Book.series.through

class BookAdmin(admin.ModelAdmin):
inlines = [SeriesInline,]

,但也希望相反。

class InlineSeriesBooks(admin.TabularInline):
model = Book.series_set.through
... Remainder is commented out ...
class SeriesAdmin(admin.ModelAdmin):
list_display = ['name', 'category', 'publisher', 'link', 'created', 'modified']
fields = ['name', 'category', 'publisher', 'link', 'created', 'modified']
readonly_fields = ["created", "modified"]
inlines = [InlineSeriesBooks,]

所有的链接似乎都建议前者通过解决方案,如Django Admin,访问反向多对多,但拼写正确陷入循环。如果我删除内联语句,页面将加载。

我已经确认我可以按照前端两个方向的关系:

{% for series in book.series.all %}..

{% for book in series.book_set.all %}

提前感谢。

这是等价的,因为两者都指向一个"隐藏的";模型,所以:

class BookSeriesInline(admin.TabularInline):
model = Book.series.through

class BookAdmin(admin.ModelAdmin):
inlines = [BookSeriesInline,]

class SeriesAdmin(admin.ModelAdmin):
inlines = [BookSeriesInline,]

因此,您可以为两个管理员使用相同的内联表,这是两个模型之间的连接表。

最新更新