【问题标题】:Auto-populate Django Model field自动填充 Django 模型字段
【发布时间】:2015-09-03 14:30:05
【问题描述】:

我有点失落。

我想根据同一模型中另一个字段的值,使用来自另一个模型的数据自动填充模型字段。

我有 2 个模型:

class Status(models.Model):
    name = models.CharField()
    value = models.DecimalField()

class Order(models.Model):
    status = models.ForeignKey(Status, to_field="name", related_name='+')
    value = models.ForeignKey(Status, to_field="value", related_name='+')

在创建Order 时,用户将选择订单的状态(待处理、完成等),订单的值应相应地自动填充。也许我累了,但我无法解决这个问题。任何建议将不胜感激。

编辑:

我在这种结构背后的想法是,每个状态都有特定的货币价值,即。 Completed 是 20 英镑,Abandoned 是 5 英镑,Pending 是 0。因此,订单一开始是待处理的,然后将被标记为完成或放弃并生成相关值。该值与状态相关联,应根据订单状态自动更新。

【问题讨论】:

  • 这个结构没有多大意义。为什么value 会在状态模型中?为什么要在两个字段中存储完全相同的内容?
  • 我已经更新了我的问题

标签: python django


【解决方案1】:

Order 中不需要 2 个字段。在订单模型中,您需要这个:

status = models.ForeignKey(Status, related_name='+')

您可以通过order.status.nameorder.status.value 访问名称和值。

【讨论】:

  • 哦,有趣。谢谢。
【解决方案2】:

对于特定情况,您不需要两个模型。您可以使用choice 字段https://docs.djangoproject.com/en/1.8/ref/models/fields/#django.db.models.Field.choices 以单个模型完成此操作

class Status(models.Model):

STATUS_PENDING = 0
STATUS_COMPLETE = 1
STATUS = (
    (STATUS_PENDING, 'Pending'),
    (STATUS_COMPLETE, 'Complete'),
name = models.CharField(max_length=30, blank=True)
value = models.DecimalField(max_digits=10, decimal_places=2, default=Decimal(0.0))
status = models.IntegerField(default=0, choices=STATUS)

【讨论】:

  • Status 模型中的name 字段是statusstatus 与订单绑定并指示订单的状态。 Status 模型中的可能选项。我最初确实使用了choices,但决定不使用它们,以免将状态选项硬编码到模型中。
  • 为什么在您可以选择修复状态时让用户写入状态,以及为什么添加额外的模型以通过添加连接来使您的查询访问字段变慢..
猜你喜欢
  • 2021-03-16
  • 1970-01-01
  • 2018-12-22
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2021-09-15
  • 2021-10-05
  • 1970-01-01
相关资源
最近更新 更多