【问题标题】:no mail default in form表单中没有邮件默认值
【发布时间】:2021-02-18 12:19:09
【问题描述】:

我正在使用一个表单 django,我想要在我的模型中已经定义的值。但是邮件的默认值没有显示在表单中。为什么?

forms.py

class ForeningForm(ModelForm):

    class Meta:
        model = Forening
        exclude = ['ordf','kass','adress']
        fields=['fname','fphone','mail','homepage','direktansk','anslutenannat',\
                'anteckningar','uppdaterad']

模型.py:

class Forening(Model):
    
    fname=CharField(default='missing',max_length=100)
    ordf=OneToOneField(Person,on_delete=CASCADE,related_name='ordf')
    kass=OneToOneField(Person,on_delete=CASCADE,related_name='ka')
    fphone=PhoneField(default='9999999999')
    adress=OneToOneField(Adress,on_delete=CASCADE,related_name='ad')
    mail=EmailField(default='missing@gmail.com')
    homepage=TextField(max_length=400,default='www.homepage.com')
    direktansk=BooleanField(default=False)
    anslutenannat=BooleanField(default=False)
    anteckningar=TextField(max_length=500,default='missing')
    uppdaterad=DateTimeField(default=timezone.now)

    def __str__(self):
        return 'förening: ' + self.fname

    class Meta:
        ordering=('fname','ordf')

views.py:

class Fcreate(CreateView):

    form_class=ForeningForm
    template_name='kammem/create.html'

    def form_valid(self,form)

        fname=form.cleaned_data['fname']
        venue=form.cleaned_data['venue']
        fphone=form.cleaned_data['fphone']
        mail=form.cleaned_data['mail']
        homepage=form.cleaned_data['homepage']
        direktansk=form.cleaned_data['direktansk']
        anslutenannat=form.cleaned_data['anslutenannat']
        antekningar=form.cleaned_data['antekningar']
        uppdaterad=form.cleaned_data['uppdaterad']

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    不显示默认值,因为模型不需要字段值(因为它具有默认值,即使用户没有填写此字段也不会设置为空白)。对于您的问题,最简单的解决方案可能是覆盖 get_form 方法,使用 initial 值作为添加到表单实例化调用的字段:

    class Fcreate(CreateView):
    
    form_class=ForeningForm
    template_name='kammem/create.html'
    
    ...
    
        def get_form(self, form_class=None):
            if form_class is None:
                form_class = self.get_form_class()
            form_kwargs = self.get_form_kwargs()
            form_kwargs.update(
                {'initial' : {'email': 'missing@gmail.com'}}
            )
            form = form_class(**form_kwargs)
            return form
    

    【讨论】:

    • 你想把它放在哪里?在视图中?
    • @JonasFredriksson 查看更新后的答案。您需要重写返回实例化表单并在实例化期间传递初始值的方法。
    • 我在尝试时遇到类型错误:'NoneType' 对象不可调用
    • 嗯,好的,根据代码源表单类可能不会直接传递给方法-github.com/django/django/blob/…。查看更新的答案。
    • 好的,错误消失了,但没有默认消息。我必须深入研究这一点。奇怪,这么简单的事情竟然这么复杂。感谢所有的答案
    猜你喜欢
    • 1970-01-01
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 2020-01-25
    • 2017-09-23
    • 1970-01-01
    • 1970-01-01
    • 2019-01-06
    相关资源
    最近更新 更多