【问题标题】:Django - ModelForm - initial valueDjango - ModelForm - 初始值
【发布时间】:2019-08-11 16:10:17
【问题描述】:

我正在使用 Modelforms,并希望设置“feeder”字段的初始值。我收到以下类型错误:“invalid literal for int() with base 10: 'None'” 可能是什么问题?

谢谢大家

forms.py:

class CashFlowForm(forms.ModelForm):
 class Meta:
    model = models.CashFlow
    fields = ['type', 'amount', 'description','date']
    widgets = {'date': DatePicker()}

views.py:

def create_cashflow(request, fundslug):

 funddetail = Fund.objects.get(slug=fundslug)

 if request.method == 'POST':
    cf = CashFlowForm(request.POST)
    cf.feeder = funddetail.feeder
    if cf.is_valid():
        instance_cf = cf.save()
        messages.success(request, 'Cash Flow successfully added!')
        return redirect('funds:create_cashflow', fundslug = fundslug) 
 else:
    cf = CashFlowForm()

 return render(request, 'funds/create_cashflow.html', {'cf': cf})

【问题讨论】:

  • 哪一行抛出异常?
  • 我相信你会得到 Noneamount 字段
  • 另外,当您说feeder字段的初始值时,您是指显示表单时的初始值还是保存表单之前设置的值?如果是前者,则不会为表单显示feeder 字段,因为它不在fields inside ModelForm Meta 中。如果是后者,那么您可能想要这样做:cf.save(commit=False) before
  • 嗨,开发者。确实是后者。我正在尝试一些事情,但问题是基金细节与基金有关,而不是与现金流模型有关
  • 发布您的 CashFlow 模型类以获得更清晰的信息

标签: django modelform


【解决方案1】:

我认为 funddetail.feeder 返回 None 或者你可以试试

cf.cleaned_data['feeder'] = funddetail.feeder

【讨论】:

    【解决方案2】:

    除非涉及外键,否则模型无关紧要。对于类型错误,它主要与您的模型字段从表单中获取的值有关。

    要在表单提交后赋值,请执行以下操作

    if request.method == 'POST':
        cf = CashFlowForm(request.POST)
        cf.save(commit=False)
        cf.feeder = funddetail.feeder
        cf.save()
    

    【讨论】:

      猜你喜欢
      • 2018-01-11
      • 2015-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2018-08-21
      • 2018-11-19
      相关资源
      最近更新 更多