【问题标题】:django - default value based on a FK's valuedjango - 基于 FK 值的默认值
【发布时间】:2014-03-13 06:17:59
【问题描述】:

我正在尝试根据 FK 字段的值定义字段的默认值。 我搜索了一下,发现了这个(它适用于我自己的模型):

def __init__(self, *args, **kwargs):
    super(Line, self).__init__(*args, **kwargs)
    if not self.id:
        self.max_payout = self.coin.LineMax()

模型“Line”以这种方式引用模型“Coin”:

coin = models.ForeignKey(Coin)

我在尝试编译时遇到的错误是:

Exception Type: RelatedObjectDoesNotExist at /admin/acb_lines/line/add/
Exception Value: Line has no coin.

我猜是因为当你开始添加一条线时,“硬币”是一个下拉菜单,还没有设置值。

[编辑] 我已经通过添加 Coin 的默认值来避免 RelatedObjectDoesNotExist 错误,但问题仍未解决

【问题讨论】:

  • __init__super 移到您的逻辑下方。
  • @AnkurAnkan:请不要将代码跨度 (like this) 用于非代码或代码关键字的单词。例如,def__init__ 应该在代码跨度中,但 this really shouldn't be。谢谢!
  • @karthikr 很抱歉,对这个很陌生,你能举个例子吗?
  • @Qantas94Heavy 感谢您的编辑,这是我在 Stack 上的第一篇(ish)帖子

标签: python django model


【解决方案1】:

听起来您是在创建 Line 之前创建 Coin。也许你可以切换这个。如果没有,请考虑在Coin.__init__ 中设置Line.max_payout。否则,覆盖save() 函数以包含此逻辑。但是,请注意,如果您这样做,它将在批处理操作上设置,并且设置值将延迟到您将对象保存到数据库中,如果您以编程方式(而不是通过表单)创建对象,这可能是一个问题。

【讨论】:

  • Coin 已经创建(我需要它来创建行),我为硬币添加了默认值,但仍然无法正常工作。我的主要问题是为用户设置一个默认值,然后他/她可以决定是否修改它。其背后的想法是在将其保存到数据库之前
猜你喜欢
  • 2017-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-02-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多