Django - ModelForm:添加不属于模型的字段

2024-01-11

注意:使用django-crispy-forms我的表格的图书馆。如果您有解决我的问题的方法,但不使用cripsy_forms图书馆,我仍然接受它。不要试图挑剔,只需要一个解决方案/解决方法。谢谢

在我的表格中Meta我班设定了模型,Driftwood,这是我想要在表单中添加的字段,但我还想添加另一个字段。不属于参考模型的一个。我要添加的这个字段是一个图像。之所以存在这个字段,是为了从中构建另一个模型。

我有一个名为Image其中有一些字段是通过使用单个操作来填充的models.ImageField(). This Image还有一个models.ForeginKey()Driftwood模型。所以Image可以通过一个实例来访问Driftwood使用其关系集属性(driftwood.image_set).

In view.py我在用generic.CreateView()作为将处理我的表单类的继承类。我计划使用form_valid()方法获取通过form.cleaned_data,我需要的图像。然后我将创建图像,传递object.id我新实例化的Driftwood并将图像放入我的Image model.

我遇到的问题是不知道如何向 Django 添加自定义字段FormModel不属于与表单关联的模型。

forms.py

from django import forms

from crispy_forms.helper import FormHelper
from crispy_forms.layout import Layout, ButtonHolder, Submit

from . import models

class DriftwoodForm(forms.ModelForm):
    class Meta:
        model = models.Driftwood
        fields = ('user', 'title', 'description')

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

        self.helper = FormHelper()
        self.helper.layout = Layout(
            'user',
            'Insert Image Field Here',
            'title',
            'description',
            ButtonHolder(
                Submit('save', 'Save', css_class='btn-success')
            )
        )

模型.py

from base64 import b64decode, b64encode # used to encode/decode image

from django.db import models

class TimeStampMixin(models.Model):
    class Meta:
        abstract = True

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)


class Driftwood(TimeStampMixin):
    user = models.ForeignKey(User)
    title = models.CharField(max_length=255)
    description = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=255)


class Image(TimeStampMixin):

    driftwood = models.ForeignKey(Driftwood)
    image = models.ImageField(upload_to='static/images')

    # gets encoded as a string in the save method
    encoded_image = models.TextField(blank=True, null=False, default='')

这是对非 django-crispy-forms 表单的操作方法:

from django import forms

from . import models


class DriftwoodForm(forms.ModelForm):
    class Meta:
        model = models.Driftwood
        fields = ('user', 'title', 'description', 'image')

    image = forms.ImageField()

完整文档:https://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ImageField https://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ImageField


现在您要做的就是像往常一样使用表单,调用save()表单上的不会尝试将图像暴力保存到指定的模型中Meta类,但您将能够在该领域做任何您想做的事情。

我不确定你,但我想你可以对 django-crispy-forms 做同样的事情,只需添加下面的字段并假设它来自模型本身。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Django - ModelForm:添加不属于模型的字段 的相关文章

随机推荐

  • 如何判断在 Dock 上放置过程中是否按下了修饰键

    我的 Cocoa 应用程序支持将文件拖放到其 Dock 图标上 但我希望根据是否按住修饰键 Command Option 等 来实现不同的行为 我尝试检查modifierFlags为了currentEvent 但无论是否按住修饰符 它们都是
  • 当我获取脚本时终端关闭(在开始时使用点运行)

    这是我的代码 bin bash if 1 then exit 0 fi array cat 1 let b array 1 count 0 for i in 1 7 do for j in 30 37 do for n in 40 47 d
  • 三元运算符的右结合性

    std cout lt lt true high pass false fail pass 是相同的 std cout lt lt true high pass false fail pass 既然三元运算符是右结合的 为什么我们不先进行右
  • 为什么java的inputstream.close()会阻塞?

    我的 Java 程序使用 ProcessBuilder redirectErrorStream 设置为 true 并有一个循环运行进程的输入流的 read 方法 该方法是阻塞的 然后我调用的外部程序停止等待输入和标准输入 我现在想终止该进程
  • 在 Spring MVC 中使用 Jackson JSON 时如何默认启用 Pascal 大小写?

    我有一个使用 Spring MVC 创建和处理多个 REST 端点的项目 我目前正在使用 Jackson 自动处理 JSON 的序列化 反序列化 RequestBody and ResponseBody注释 我已经让杰克逊开始工作了 所以我
  • 将 cqlsh 与 ssl 结合使用

    我已经在我的 cassandra 节点中启用了 ssl 加密 并且我正在尝试弄清楚如何使用带有 ssl 的 cqlsh 连接到我的节点 当我跑步时 cqlsh ssl我收到以下错误 Validation is enabled SSL tra
  • 我们可以用 ES6 Generator 做哪些 for 循环做不到的事情?

    我深入了解了 ES6 功能 Generators 引起了我的注意 我突然想到的一件事是链接 Promise 对象 而我无法使用循环来做到这一点 我们还能做哪些以前做不到的其他机制 我确实明白这是一个广泛的问题 但目前我除了承诺之外什么也想不
  • G1垃圾收集器:为什么幸存者空间总是满的?

    这是输出jmap heap命令 Survivor Space regions 52 capacity 54525952 52 0MB used 54525952 52 0MB free 0 0 0MB 100 0 used 我已经执行了很多
  • 使用UniversalImageDownloader的ListView滚动不平滑

    我正在使用包含图像的 ListView 这些图像是从互联网加载到适配器内的 因此我正在使用通用图像下载器 不幸的是 当我向下滚动需要下载新内容的位置时 ListView 的滚动会短暂 滞后 我实际上期望像 ListView 这样的行为滚动完
  • GitHub 组织未出现在“持续部署”页面中

    我的个人 GitHub 帐户属于五个组织 从 GitHub 设置 Azure 持续集成时 五个组织中只有四个出现在列表中 我们尝试过登录和注销 GitHub 和 Azure 此外 我们尝试更改 Azure 中的帐户 然后重新添加相同的帐户
  • 按新指南随机排序

    为了从 Sql 查询中以随机顺序获取结果 我通常按新的 Guid 进行排序 我之前已经使用实体框架完成了此操作 但由于某种原因它现在不起作用 例如 使用 Adventureworks2008r2 数据库 我在 LinqPad 中运行以下查询
  • 如何使用 Javascript 将 cookie 存储在本地存储中?

    我有一个适用于 Android 希望以后还有 iPhone 的应用程序 它基于 Javascript 并使用 Phonegap Applaud 制作成应用程序 不幸的是 设置和获取 cookie 在 Android 上不起作用 这可能是 A
  • 内容仅在我单击时出现在页面上

    我已经通过 Angular 2 应用程序连接到 Firebase 3 没有什么特别的 只是一个包含一小部分数据的简单表 在我的 Angular 2 应用程序中 我在服务中创建了服务 我创建了一个侦听器事件 如下所示 getAddedBugs
  • 创建 JavaScript 自定义事件

    我想用 JavaScript 创建一个自定义事件 我有一个 WPF 应用程序 里面有一个 WebBrowser 还有一个带有 JavaScript 的 HTML 页面 我使用打印机工作 当打印机的状态发生变化时 它会触发 NET 中的事件
  • 将特色图像添加到 wp_nav_menu 项目

    这是一个自我问答 如何修改 wp nav menu 输出中出现的文本 html 例如 我想为页面和类别添加特色图像 您可以看到使用自定义步行器执行此操作的示例 但对于小的更改来说 代码非常复杂 当然有办法用过滤器来做到这一点吗 这是我在 W
  • 基于范围的临时对象

    我知道 一般来说 基于范围的临时对象的生命周期for循环扩展到整个循环 我读过C 11 基于范围的 for 语句 range init 生命周期 https stackoverflow com questions 9657708 c11 t
  • AddDbContext 或 AddDbContextPool

    对于 Asp net Core 应用程序 我们必须使用哪一个 AddDbContext or AddDbContextPool 根据 EF Core 文档 AddDbContextPool提供高性能 但默认的 Asp net Core 项目
  • System.Windows.Forms.Timer 未触发

    我想用一个System Windows Forms Timer确保事件在我正在创建的 Excel 插件的 UI 线程上触发 我按如下方式构造计时器 private System Windows Forms Timer timer priva
  • 如果我在我的反应应用程序中使用打字稿元组,我会在 vscode 的第 1 行收到 eslint 错误?

    错误是Parsing error Cannot read property map of undefined 我设置了一个新文件只是为了重现错误 export default gt let something string boolean
  • Django - ModelForm:添加不属于模型的字段

    注意 使用django crispy forms我的表格的图书馆 如果您有解决我的问题的方法 但不使用cripsy forms图书馆 我仍然接受它 不要试图挑剔 只需要一个解决方案 解决方法 谢谢 在我的表格中Meta我班设定了模型 Dri