Django ModelForm:添加不属于mod的字段

2024-09-30 10:32:19 发布

您现在位置:Python中文网/ 问答频道 /正文

注意:对我的表单使用django-crispy-forms库。如果您有一个不使用cripsy_forms库的解决方案,我还是接受它。不要挑剔,只需要一个解决方案/解决办法。谢谢

在我的表单的Meta类中,我设置了模型Driftwood,它是我希望在表单中使用的字段,但我还想添加另一个字段。不属于被引用模型的对象。我要添加的字段是一个图像。这个字段的原因是为了从中构建另一个模型。在

我有一个名为Image的模型,它有一些字段,这些字段是通过使用单个models.ImageField()来填充的。这个Image还有一个与Driftwood模型相关的models.ForeginKey()。因此,Image可以通过Driftwood的实例使用其关系集属性(driftwood.image_set)进行访问。在

view.py中,我使用generic.CreateView()作为将处理我的表单类的继承类。我计划使用form_valid()方法通过form.cleaned_data获取我需要的图像。然后我将创建图像,将新实例化的Driftwoodobject.id和图像传递到我的Image模型中。在

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

表单.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在

^{pr2}$

Tags: djangofrompy模型图像imageimportself
2条回答

对于非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


现在您要做的只是像往常一样使用表单,在表单上调用save()不会试图将图像保存到Meta类中指定的模型中,但是您可以对字段执行任何您想要的操作。在

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

这是最新的表格,以防有人好奇。在

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

    image = forms.ImageField()

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

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

相关问题 更多 >

    热门问题