【问题标题】:about cacade foreignkey in django admin page关于 Django 管理页面中的级联外键
【发布时间】:2025-12-03 23:05:01
【问题描述】:

我的模型如下:

class Manufacturers(models.Model):
    name = models.CharField()

class Phones(models.Model):
    manufacturer = models.ForeignKey(Manufacturers)
    name = models.CharField()

class Prices(models.Model):
    phone = models.ForeignKey(Phones)
    price = models.DecimalFeild()

我已经在 admin.py 中注册了它们

我的问题是: 在django的管理界面中,当我添加价格时,我可以从下拉列表中选择手机,但是手机太多了,所以我想先选择制造商,然后从制造商的手机中选择手机。我怎样才能做到这一点。 非常感谢。

【问题讨论】:

    标签: django select admin chained


    【解决方案1】:

    这个术语是“chained select menus”。

    有多个implementations in django。您可能会觉得有用的是django-smart-selects

    使用 django-smart-selects,您可以这样编写模型:

    class Manufacturers(models.Model):
        name = models.CharField()
    
    class Phones(models.Model):
        manufacturer = models.ForeignKey(Manufacturers)
        name = models.CharField()
    
    class Prices(models.Model):
        phone = ChainedForeignKey(
            Phone, 
            chained_field="manufacturer",
            chained_model_field="manufacturer", 
            show_all=False, 
            auto_choose=True
        )
        price = models.DecimalField()
    

    说了这么多,我想知道你是否以最好的方式实现了这一点。

    最好将价格显示在每部手机的管理表单下。因此,您无需创建价格记录并从下拉列表中选择手机,而是进入该手机的记录并添加价格记录。请参阅 django 在InlineModelAdmin 上的文档。

    【讨论】:

      最近更新 更多