【发布时间】:2015-09-06 13:21:24
【问题描述】:
注意:在我的表单中使用 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获取我需要的图片。然后我将创建图像,将我新实例化的Driftwood 的object.id 和图像传递给我的Image 模型。
我遇到的问题是不知道如何向 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')
)
)
models.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='')
【问题讨论】:
标签: python django django-forms django-crispy-forms