【问题标题】:Django Model in one to one relationship and displaying it from the adminDjango模型以一对一的关系并从管理员显示它
【发布时间】:2010-12-03 04:00:33
【问题描述】:

适用于以下型号:

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

我也想从管理员那里输入上面的信息,这样界面就会类似于下面这样:

添加产品:

  • 姓名:
  • 加元:
  • 美元:

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

class ProductInline(admin.StackedInline):
    model = Product

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

我做得对吗?

【问题讨论】:

    标签: django django-models django-admin


    【解决方案1】:

    为什么不让cadusd 字段成为Product 表的成员?这样你就可以免费获得管理员的好处。将它们存储在单独的模型中可以得到什么?

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

    我使用模板标记执行类似的操作,以根据会话变量管理以给定货币显示的货币值(当我遇到问题时,请参阅 the question I asked)。

    【讨论】:

    • 我更喜欢 cad 和 usd 作为 Product 表的一部分,但根据其他团队成员的说法,价格本身可能会有额外的操作,例如折扣等。
    • 但是,如果价格和产品之间存在一对一的关联,那么将它们放在单独的表格中会有什么帮助?你可以用单独的表来做什么,而你不能用一个表来做?
    【解决方案2】:

    我认为你必须使用 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/

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-08
      • 1970-01-01
      • 2011-07-03
      • 2010-12-14
      • 1970-01-01
      • 2014-12-01
      相关资源
      最近更新 更多