注意:为我的表单使用django-crispy-forms
库。如果您的问题解决方案涉及不使用cripsy_forms
库,我会同样接受它。不试图挑剔只是需要一个解决方案/解决。感谢
在我的表单Meta
课程中,我在表单中设置了我想要的模型Driftwood
及其字段,但我还想添加另一个字段。一个不属于引用模型的人。我要添加的这个字段是一个图像。这个领域的原因是从中构建另一个模型。
我有一个名为Image
的模型,其中包含一些字段,这些字段通过使用单个models.ImageField()
进行填充。此Image
还有models.ForeginKey()
与Driftwood
模型的关系。因此Image
可以使用其关系集属性(Driftwood
)通过driftwood.image_set
的实例进行访问。
在view.py
我使用generic.CreateView()
作为将处理我的表单类的继承类。我计划使用form_valid()
方法通过form.cleaned_data
获取我需要的图像。然后,我将创建图像,将新实例化的object.id
的{{1}}和图像传递到我的Driftwood
模型中。
我遇到的问题是不知道如何向不属于与表单关联的模型的Django Image
添加自定义字段。
FormModel
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')
)
)
答案 0 :(得分:3)
这就是你如何用非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做同样的事情,只需添加下面的字段并从模型中假设它。
答案 1 :(得分:2)
这里有更新的表格以防万一有人好奇。
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')
)
)