如何使用数据提供非绑定表单字段?

时间:2012-08-29 19:49:11

标签: django

之前我的模型中有一个单独的时间字段和一个日期字段,我现在正尝试加入一个DateTime字段,因为时区问题。

class Conversation(models.Model):
    conversation_datetime = models.DateTimeField()    

在我的表单中,我创建了两个新的字段,一个用于时间,另一个用于日期,以便相应地提取日期时间。

class CallsForm(ModelForm):       
    conversation_date = forms.DateField(localize=True, widget=forms.DateInput())
    conversation_time = forms.TimeField(localize=True, widget=forms.TimeInput())

    def __init__(self, *args, **kwargs):
        super(CallsForm, self).__init__(*args, **kwargs)
        self.fields['conversation_date'] = self.instance.conversation_datetime.date()
        self.fields['conversation_time'] = self.instance.conversation_datetime.time()

在我看来,我只是传入实例:

call = Conversation(conversation_datetime = datetime.datetime.utcnow().replace(tzinfo=utc))
form = CallsForm(instance=call)    

但是在我的模板中,字段不会被渲染。如果我在__init__中注释掉这两行,它就会完美呈现。这有什么不对?

   # self.fields['conversation_date'] = self.instance.conversation_datetime.date()
   # self.fields['conversation_time'] = self.instance.conversation_datetime.time()

1 个答案:

答案 0 :(得分:1)

您覆盖表单字段。可能你想设置初始值:

self.fields['conversation_date'].initial = self.instance.conversation_datetime.date()
self.fields['conversation_time'].initial = self.instance.conversation_datetime.time()