注意:使用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='')