我一直在研究django表单以获得一种显示方式 要创建的模型对象的窗体以及该对象的图像的窗体
我已经尝试使用CBV FBV,到目前为止,我得到的最好结果是为这两个表单设置TemplateView和POST.requests,尽管我仍然得到一个关于模型图像设置的id的错误
views.py:
class VeiclesCreate2(TemplateView):
veicle_form_class = VeicleForm
image_form_class = ImageForm
template_name = 'veiclesform.html'
def post(self, request):
post_data = request.POST or None
veicle_form = self.veicle_form_class(post_data, prefix='veicle')
image_form = self.image_form_class(post_data, prefix='image')
context = self.get_context_data(veicle_form=veicle_form,
image_form=image_form)
if veicle_form.is_valid():
self.form_save(veicle_form)
if image_form.is_valid():
self.form_save(image_form)
return self.render_to_response(context)
def form_save(self, form):
obj = form.save()
messages.success(self.request, "{} saved successfully".format(obj))
return obj
def get(self, request, *args, **kwargs):
return self.post(request, *args, **kwargs)
models.py:
class Veiculos (models.Model):
YEAR_CHOICES = []
for r in range(1960, (datetime.now().year+1)):
YEAR_CHOICES.append((r, r))
modelo = models.CharField(max_length=100)
potencia = models.CharField(max_length=40)
cor = models.CharField(max_length=30)
preco = models.DecimalField(max_digits=8, decimal_places=2)
ano = models.IntegerField(('ano'), choices=YEAR_CHOICES, default=datetime.now().year)
created_time = models.DateTimeField(auto_now=True)
updated_time = models.DateTimeField(auto_now_add=True)
def __str__(self):
return '%s %s' % (self.modelo, self.preco)
def get_absolute_url(self):
return reverse('category2')
class Imagens (models.Model):
veicle = models.ForeignKey(Veiculos, on_delete=models.CASCADE, verbose_name="imagens do veiculo")
imagem = models.ImageField(upload_to='', blank=True)
forms.py:
from django import forms
from .models import Categorias, Imagens, Veiculos
class VeicleForm(forms.ModelForm):
class Meta:
prefix = 'veicle'
model = Veiculos
fields = ('modelo', 'potencia', 'cor', 'preco', 'ano')
class ImageForm(forms.ModelForm):
class Meta:
prefix = 'image'
model = Imagens
fields = ('imagem', )
veiclesform.html:
{% extends 'base.html' %}
{% load staticfiles %}
{% load static %}
{% get_media_prefix as MEDIA_PREFIX %}
<!DOCTYPE html>
<html>
<body>
{% block title %}veicle ADD{% endblock %}
{% block content %}
<h1>ADD FORM</h1>
<div class="form">
<form method="post" action="/veicles/add" enctype="multipart/form-data">
{% csrf_token %}
<label for="modelo">modelo:
<input id="modelo" type="text" name="modelo" value="{{ modelo }}">
</label><br>
<label for="potencia">potencia:
<input id="potencia" type="number" name="potencia" value="{{ potencia }}">
</label> <br>
<label for="cor">cor:
<input id="cor" type="text" name="cor" value="{{ cor }}">
</label><br>
<label for="preco">preco
<input id="preco" type="number" step="0.01" name="preco" value="{{ preco }}">
</label><br>
<label for="ano">ano:
<input id="ano" type="year" name="ano" value="{{ ano }}">
</label>
<label for="imagem">imagem:
<input id="imagem" type="file" name="imagem" value="{{ imagem }}">
</label>
<input type="submit" value="OK">
</form>
</div>
{% endblock %}
</body>
</html>
我得到: 完整性错误at/veicles/add
非空约束失败:veicles_imagens.veicle_id
目前没有回答
相关问题 更多 >
编程相关推荐