添加不属于模型的自定义表单字段 (Django)

新手上路,请多包涵

我在管理网站上注册了一个模型。它的字段之一是一个长字符串表达式。我想在管理员中将自定义表单字段添加到此模型的添加/更新页面。基于这些字段的值,我将构建长字符串表达式并将其保存在相关模型字段中。

我怎样才能做到这一点?

我正在从符号构建数学或字符串表达式。用户选择符号(这些是不属于模型的自定义字段),当他们单击保存时,我从符号列表中创建一个字符串表达式表示并将其存储在数据库中。我不希望符号成为模型和数据库的一部分,只是最终表达式。

原文由 michalv82 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 494
1 个回答

无论是在你的 admin.py 还是在一个单独的 forms.py 你可以添加一个 ModelForm 类,然后像往常一样在里面声明你的额外字段。我还给出了一个示例,说明如何在 form.save() 中使用这些值:

 from django import forms
from yourapp.models import YourModel

class YourModelForm(forms.ModelForm):

    extra_field = forms.CharField()

    def save(self, commit=True):
        extra_field = self.cleaned_data.get('extra_field', None)
        # ...do something with extra_field here...
        return super(YourModelForm, self).save(commit=commit)

    class Meta:
        model = YourModel

要让额外的字段出现在管理员中:

  1. 编辑您的 admin.py 并设置表单属性以引用您在上面创建的表单。
  2. 在您的字段或字段集声明中包含您的新字段。

像这样:

 class YourModelAdmin(admin.ModelAdmin):

    form = YourModelForm

    fieldsets = (
        (None, {
            'fields': ('name', 'description', 'extra_field',),
        }),
    )

更新:

在 Django 1.8 中,您需要将 fields = '__all__' 添加到 YourModelForm 的元类中。

原文由 Vishnu 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题