2010-12-08 165 views
0

我的模型如下图所示:关于Django管理页面cacade外键

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的管理界面,当我添加一个价格,我可以从下拉列表中选择一个手机,但有这么多的手机,所以我想先选择制造商,然后从制造商的手机中选择手机。我该如何做到这一点。 非常感谢。

回答

1

这个术语是“chained select menus”。

有一些implementations in django。一个你可能会觉得有用的是django-smart-selects

使用Django的智能选择,这是你会怎么写你的机型:

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

+0

非常感谢! – Peter 2010-12-09 14:20:46