首页 > 解决方案 > Django admin内联“添加更多项目”按钮不起作用

问题描述

尝试在 Django 中学习堆叠内联。有一个非常基本的设置

对于 admin.py

from django.contrib import admin

from .models import Picture, Review


class ReviewInline(admin.StackedInline):
    model = Review
    save_on_top = True
    fields = ["reviewer"]

#@admin.register(Picture)
class PictureAdmin(admin.ModelAdmin):
    save_on_top = True
    fields = ["painter"]
    inlines = [ReviewInline,]


admin.site.register(Review)
admin.site.register(Picture, PictureAdmin)

对于模型.py

from django.db import models

class Picture(models.Model):
    painter = models.CharField(("painter"), max_length=255)
    def __str__(self):
        return self.painter


class Review(models.Model):
    picture = models.ForeignKey(Picture, on_delete=models.CASCADE)
    reviewer = models.CharField( max_length=255)
    extra = 0
    def __str__(self):
        return self.reviewer

这是一张图片

可以看出没有“添加更多项目”按钮。我认为这可能是 JS 问题,但不确定(我确实在浏览器中启用了 JS)

有人有什么想法吗?

标签: djangopython-3.xdjango-admin

解决方案


我相信你extra=0在错误的类中,它应该在Inline不是Model......

extra=0从模型中移除

class Review(models.Model):
    picture = models.ForeignKey(Picture, on_delete=models.CASCADE)
    reviewer = models.CharField( max_length=255)

    # extra = 0     <---- remove this

    def __str__(self):
        return self.reviewer

将其添加到内联:

class ReviewInline(admin.StackedInline):
    model = Review
    save_on_top = True
    extra = 0
    fields = ["reviewer"]

理由来自这个例子的这个片段:

@admin.register(Painter)
class PainterAdmin(admin.ModelAdmin):
    save_on_top = True
    fields = ["name"]
    inlines = [PictureInline]


class ReviewInline(admin.StackedInline):
    model = Review
    extra = 0
    fields = ["reviewer", "comment"]

编辑:第二个想法你可能也想摆脱save_on_top内联?


推荐阅读