【问题标题】:Pre-fill data in individual formset forms with modelformset_factory使用 modelformset_factory 在单个表单集表单中预填充数据
【发布时间】:2016-02-06 11:20:32
【问题描述】:

我想生成一个“更新表单集”以一次性更新大量实例,其中更新的字段在数据库中为空(在呈现更新表单集时)但“建议”使用已填写的字段。

我的模型放在这里:

class Event(models.Model):
    plan_start_time = models.TimeField()
    actual_start_time = models.TimeField(blank=True, null=True)

所以我想要一张表格,其中actual_start_time 建议plan_start_time 作为预填充(初始)值。

我尝试了什么:

class EventForm(forms.ModelForm):

    def __init__(self, *args, **kwargs):
        super(EventForm, self).__init__(*args, **kwargs)
        self.fields['actual_start_time'].initial = self.fields['plan_start_time']  # doesn't work 
        self.fields['actual_start_time'].initial = "08:00" # doesn't work either
        self.fields['actual_start_time'].initial = datetime.time(hour=8)  # doesn't work...
        self.initial['actual_start_time'] = self.fields['plan_start_time'] # this puts '<django.forms.fields.TimeField object at 0x067BA330>' in the field... not its value

    class Meta:
        model = Event
        fields = ('plan_start_time', 'actual_start_time', )

# Specifying form to use
MyFormSet = modelformset_factory(Event, extra=0, fields=('plan_start_time', 'actual_start_time'), form=EventForm)

我想问题归结为:我可以访问表单的__init__() 中的表单字段value吗? 如果没有,解决此问题的方法是什么?

作为替代方案,我正在考虑将 plan_start_time 呈现为隐藏字段,然后使用 Javascript 将其复制到表中每个字段的 actual_start_time 字段中。但是如果没有 Django 客户端的方式来做到这一点,我会感到惊讶,所以现在想避免使用 JS。

使用 Django 1.8。

【问题讨论】:

  • 感谢@ShangWang,我看过那个,但它似乎没有涵盖我的用例。我想根据另一个字段预填充数据。此外,我想知道为什么上述方法不起作用。

标签: django django-forms


【解决方案1】:

这可以通过提供form 以在modelformset_factory 中使用并以正确的方式覆盖__init__() 来完成。使用self.instance,可以访问对象现有的表单值:

def __init__(self, *args, **kwargs):
    super(EventForm, self).__init__(*args, **kwargs)
    if not self.instance.actual_start_time:
        self.initial['actual_start_time'] = self.instance.plan_start_time

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2022-01-01
    • 2022-01-24
    • 2021-01-10
    • 2018-09-06
    • 2012-09-08
    相关资源
    最近更新 更多