为同一PK显示两个表单

2024-06-26 11:03:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在研究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


Tags: nameimageselfformidformodelslabel