Cri*_*spy 5 python django django-forms django-crispy-forms
注意:将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新实例化Driftwood的图像和图像传递到Image模型中。
但是,我的问题是不知道如何向FormModel不与表单关联的模型的Django添加自定义字段。
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')
)
)
Run Code Online (Sandbox Code Playgroud)
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='')
Run Code Online (Sandbox Code Playgroud)
这是对非 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()
Run Code Online (Sandbox Code Playgroud)
完整文档:https ://docs.djangoproject.com/en/1.8/ref/forms/fields/#django.forms.ImageField
现在您要做的就是像往常一样简单地使用表单,调用save()表单不会尝试将图像暴力保存到类中指定的模型中Meta,但您将能够对该字段执行任何您想要的操作。
我不确定你,但我想你可以对 django-crispy-forms 做同样的事情,只需添加下面的字段并假设它来自模型本身。
| 归档时间: |
|
| 查看次数: |
2939 次 |
| 最近记录: |