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

时间:2009-10-01 22:00:22

标签: django django-models django-admin

对于以下型号:

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)

对于每种产品,它与一个且仅有一个Price对象相关,该对象将包含加拿大或美元价值。以上是设置这种关系的正确方法吗?以下是一些示例数据:

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

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

添加产品

  • 名:
  • CAD:
  • USD:

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

class ProductInline(admin.StackedInline):
    model = Product

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

我是以正确的方式做的吗?

2 个答案:

答案 0 :(得分:1)

为什么不让字段cadusd成为Product表的成员?这样你就可以免费获得管理员的善意。你把它们存放在一个单独的模型中会得到什么?

另外,为什么不只是存储一个价格,并且有汇率(我不知道这是否适合您的定价模式,但似乎从您给出的示例)。这样您只需要输入一个价格,系统的其他位可以在需要时以替代货币显示价格。

我使用模板标签做类似的事情,根据会话变量管理给定货币的货币值显示(当我遇到困难时,请参阅the question I asked。)

答案 1 :(得分:0)

我认为你必须使用one2one人际关系

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/