【问题标题】:django: how to get value from CharField and ModelChoiceFielddjango:如何从 CharField 和 ModelChoiceField 中获取价值
【发布时间】:2013-11-22 23:06:39
【问题描述】:

我有一个 GroupAdminForm 类,用于扩展 Django 中的组管理页面。有两个字段,selected_to_change 和 print_name。我打算做的是在 "selected_to_change" 中选择一列并在 "print_name" 中输入一个字符名称,以便进行如下查询:

UPDATE "annotation" 
SET print_name= "value of print_name" 
WHERE id = "value of selected_to_change";

这里是 GroupAdminForm:

class GroupAdminForm(forms.ModelForm):
    users = forms.ModelMultipleChoiceField(queryset=User.objects.all(),
                                       widget=FilteredSelectMultiple('Users', False),
                                       required=False)

    select_to_change = forms.ModelChoiceField(queryset=Annotation.objects.all(), required=False)
    print_name = forms.CharField(required=False)

    class Meta:
        model = Group

    def __init__(self, *args, **kwargs):
        instance = kwargs.get('instance', None)
        if instance is not None:
            initial = kwargs.get('initial', {})
            initial['users'] = instance.user_set.all()
            initial['locations'] = instance.c_locations.all()
            kwargs['initial'] = initial
        super(GroupAdminForm, self).__init__(*args, **kwargs)

    def save(self, commit=True):
        group = super(GroupAdminForm, self).save(commit=commit)

        if commit:
            group.user_set = self.cleaned_data['users']
        else:
            old_save_m2m = self.save_m2m
            def new_save_m2m():
                old_save_m2m()
                group.user_set = self.cleaned_data['users']
            self.save_m2m = new_save_m2m
        return group

如何从 CharField 和 ModelChoiceField 中获取值以在方法 save() 中进行此类查询?谢谢。

【问题讨论】:

  • 为什么不能像使用 users 一样从 self.cleaned_data 获取它们?请注意,group.user_set 几乎肯定不是您认为的那样,实际上并没有在数据库中设置任何内容。
  • 非常感谢!我不知道这些值已经在 clean_data 中。
  • 如果这解决了您遇到的问题,您应该写一个答案部分,详细说明所需的确切更改。

标签: python django django-forms django-admin django-models


【解决方案1】:

您已经在使用 self.cleaned_data 中保存的表单中的数据。

print self.cleaned_data['select_to_change']
print self.cleaned_data['print_name']

【讨论】:

    猜你喜欢
    • 2012-08-29
    • 1970-01-01
    • 2021-06-20
    • 2023-01-05
    • 2019-11-16
    • 1970-01-01
    • 2010-11-23
    • 2013-11-29
    • 2018-10-08
    相关资源
    最近更新 更多