Django Admin中的外键模型

时间:2016-09-10 17:29:19

标签: python django django-models django-admin

我在Django中有两个用户角色:

  • 商业广告
  • 卖家

我创建了两个模型,卖方模型对Commercials有一个ForeignKey字段(每个卖家都有商业相关)。当我在管理员中注册模型时,我可以使用StackedInlineTabularInline等创建商业广告和相关卖家。

我遇到的问题是我需要将用户与此模型关联才能进行身份验证,登录等。在管理员中我需要创建一个用户(以内联方式,而不是下拉框)

这是我的代码:

models.py

class Commercial(models.Model):
    name = models.CharField(max_length=255, null=True)
    user = models.OneToOneField(User, null=True)


class Seller(models.Model):
    name = models.CharField(max_length=255, null=True)
    commercial = models.ForeignKey('Commercial')
    user = models.OneToOneField(User, null=True)

admin.py

class SellerAdmin(admin.StackedInline):
    model = Seller
    extra = 1

class CommercialAdmin(admin.ModelAdmin):
   inlines = [SellerAdmin]

admin.site.register(Commercial, CommercialAdmin)

我需要编辑,创建,与这些模型相关的用户等内联而不是模态窗口,有什么办法吗?

enter image description here

2 个答案:

答案 0 :(得分:0)

没有办法以Inlines的形式建立反向关系(也就是说)。 Django管理面板默认没有该功能。

您可以取消注册默认的UserAdmin,通过继承原始管理员面板来创建新的管理员面板,并将此卖家添加为内联。 Django仍然存在不支持多个内联的问题,因此,您将无法在同一个管理页面中使用商业模型。

要解决此问题,您可以参考this information from the doc,其中显示了如何为特定的ModelAdmin覆盖自动创建的ModelForm。

然而,这不会有用,因为它们需要做很多工作。我宁愿建议在如何使用应用程序时实现一种解决方法,而不是将其复杂化。取决于项目的需求,是否需要经历这么多麻烦

答案 1 :(得分:0)

Django nested inlines库可能会对您有所帮助。