代码之家  ›  专栏  ›  技术社区  ›  Thierry Lam

一对一关系中的Django模型,并从管理员处显示

  •  2
  • Thierry Lam  · 技术社区  · 15 年前

    对于以下型号:

    class Price:
        cad = models.DecimalField(max_digits=8, decimal_places=2)
        usd = models.DecimalField(max_digits=8, decimal_places=2)
    
    class Product:
        name = models.CharField(max_length=255)
        price = models.ForeignKey(Price)
    

    对于每种产品,它只与一个包含加拿大或美元价值的价格对象相关。以上是建立这种关系的正确方式吗?以下是一些示例数据:

    Shirt, $100 US, $120 CAD
    Book, $20 US, $25 CAD
    

    我还想从管理员处输入上述信息,以便界面类似于以下内容:

    添加产品:

    • 姓名:
    • 计算机辅助设计:
    • 美元:

    我可以使用以下代码或多或少地执行上述操作:

    class ProductInline(admin.StackedInline):
        model = Product
    
    class PriceAdmin(admin.ModelAdmin):
        inlines = [
            ProductInline,
        ]
    

    我这样做合适吗?

    2 回复  |  直到 15 年前
        1
  •  0
  •   Matthew Schinckel    15 年前

    我想你必须用一种关系

    class Price:
        cad = models.DecimalField(max_digits=8, decimal_places=2)
        usd = models.DecimalField(max_digits=8, decimal_places=2)
    
    class Product:
        name = models.CharField(max_length=255)
        price = models. OneToOneField(Price, primary_key=True)
    

    http://www.djangoproject.com/documentation/models/one_to_one/

        2
  •  1
  •   Community CDub    8 年前

    为什么不把这些田地 cad usd 成为 Product 桌子?这样你就可以免费得到行政许可。将它们存储在单独的模型中会获得什么好处?

    另外,为什么不只存储一个价格,并有一个汇率(我不知道这是否适合您的定价模型,但它似乎从您给出的例子)。这样,您只需要输入一个价格,如果需要,系统的其他部分可以用另一种货币显示价格。

    我对模板标记执行了类似的操作,根据会话变量管理给定货币中货币值的显示(请参见 the question I asked 当我被卡住的时候)。