【问题标题】:Django Crispy Formsets Only Using Last iteration -- overriding last results?Django Crispy Formsets 仅使用最后一次迭代——覆盖最后的结果?
【发布时间】:2013-06-11 23:21:02
【问题描述】:
class BusinessMemberInlineForm(ModelForm):
    helper = FormHelper()
    username = 'no user found yet'

    def __init__(self, *args, **kwargs):
        super(BusinessMemberInlineForm, self).__init__(*args, **kwargs)

        if hasattr(self.instance, 'user'):
            self.username = self.instance.user.username

        self.helper.layout = Layout(
            Div(
                Div(
                    Column(
                        HTML('<b>%s</b>' % self.username)
                    ),
                    Column(
                        'can_post'
                    ),
                    Column(
                        'is_admin'
                    ),
                    Column(
                        'DELETE'
                    ),

                    'id',
                    'businessprofile',

                    css_class="span12"
                ),
                css_class="row-fluid"
            ),
        )

    class Meta:
        model = BusinessMember
        fields = ['can_post', 'is_admin']

这会输出如下内容:

no user found yet [x] can post? [x] is admin? [ ] remove?

no user found yet [ ] can post? [ ] is admin? [ ] remove?

代替:

Admin [x] can post? [x] is admin? [ ] remove?

Test user [ ] can post? [ ] is admin? [ ] remove?

这里有一些我不明白的地方。它似乎只保存了创建的 Cripsy 布局的最后一个实例(一个空模型),因此它只打印“尚未找到用户”。

我完全糊涂了,我添加了print self.username 并且值都设置正确。

我应该如何向表单集添加动态标签?

【问题讨论】:

    标签: django formsets


    【解决方案1】:

    啊!

    我最终不得不制作一个自定义小部件来适当地显示每个字段中的名称,这比原本应该做的要困难得多!

    从 django 导入表单

    我的 utils/widgets.py

    class DisplayTextWidget(forms.Widget):
        display_value = ""
    
        def __init__(self, attrs=None, display_value="Nothing here!"):
            self.display_value = display_value
    
            super(DisplayTextWidget, self).__init__(attrs)
    
        def render(self, name, value, attrs=None):
            return self.display_value
    

    然后在forms.py中

    self.fields['user'].widget = DisplayTextWidget(display_value=self.instance.user.username)
    

    【讨论】:

      猜你喜欢
      • 2018-08-02
      • 2022-01-04
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2016-05-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多