【问题标题】:Django Admin panel interfaceDjango 管理面板界面
【发布时间】:2017-09-21 16:22:25
【问题描述】:

要创建管理界面来编辑某些字段,最佳做法是什么?自定义默认 Django admin 还是创建 admin 模板?

我想通过管理员编辑status 字段。但是其他字段,管理员无法编辑。在这种情况下,我可以为管理员编写新的视图和模板,还是只自定义默认的管理面板?

class SendProduct(models.Model):
    PAYMENT_CHOICE = (
        ('A', 'Advanced'),
        ('C', 'COD'),
    )
    item_name = models.CharField(max_length=200)
    item_details = models.TextField()
    delivery_address = models.TextField()
    payment_type = models.CharField(max_length=1, choices=PAYMENT_CHOICE)
    payable_amount = models.IntegerField(default=0)
    delivery_charge = models.IntegerField(default=0)
    qr_code = models.ImageField(upload_to='qrcode', blank=True, null=True)
    user = models.ForeignKey(Profile, on_delete=models.CASCADE)
    status = models.IntegerField(default=0)

【问题讨论】:

  • 如何构建您想要适应的模型?如果您需要有效的帮助,您应该添加它。

标签: python django


【解决方案1】:

排除字段并将其设为只读 (admin.py)。下面给出一个例子

class SendProductAdmin(admin.ModelAdmin):
    exclude=("item_name ",)
    readonly_fields=('item_name', )

admin.site.register(SendProductAdmin)

请注意,您可以根据需要排除任意数量的字段。

【讨论】:

    【解决方案2】:

    管理面板的使用和你开发的视图有区别,需要注意的区别是管理面板是为staff users,公司和组织内部的用户提供内容到最后-用户。

    那么谁将使用该表单?在此基础上做出决定,您想要做的事情可以在管理面板和开发视图中完成。

    【讨论】:

    • 我已经添加了我的模型。我想通过管理员编辑状态。但是其他字段,管理员无法编辑。在这种情况下,我可以为管理员编写新的视图和模板还是只自定义默认的管理面板?
    • 您需要为某些用户限制您的管理面板?所以他们只能编辑部分字段?
    • 你不能以普通的方式做到这一点,只是一种棘手的方式,定义一个新的模型类作为你当前类的代理并对其进行限制,从而可以访问它而不是你的主要模型跨度>
    • 或者您可以在当前管理员中设置字段,但在这种情况下,其他任何人都无法编辑额外的字段