我正在用Django开发一个应用程序,提交表单时遇到以下错误:

enter image description here

我会和你分享我的代码

这是我的模型:

class Oferta(models.Model):
    titulo = models.CharField(verbose_name='Título', max_length=100, null=False, blank=False)
    descripcion = models.TextField(verbose_name='Descripción', null=True, blank=True)
    cantidad = models.PositiveSmallIntegerField(verbose_name='Cantidad', null=False, blank=False, default=1)
    valor = models.DecimalField(verbose_name='Valor', max_digits=3, decimal_places=2, null=False, blank=False)
    material = models.CharField(verbose_name='Material', max_length=20, null=False, blank=False, choices=MATERIAL_CHOICES)
    imagenes = models.ManyToManyField(ImagenesOferta, verbose_name='Imagenes de la Oferta', blank=True)
    usuario = models.ForeignKey(Usuario, verbose_name='Usuario', null=False, blank=False, on_delete=models.CASCADE)
    is_active = models.BooleanField(verbose_name='Activo/Inactivo', default=True)
    vendido = models.BooleanField(verbose_name='Vendido', default=False)
    fecha_creacion = models.DateTimeField(verbose_name='Fecha de Creación', auto_now_add=True)

    def __str__(self):
        return self.titulo

    class Meta:
        verbose_name = 'Oferta'
        verbose_name_plural = 'Ofertas',
        ordering = ['-fecha_creacion']

这是我的观点:

login_required(login_url='login')
def publish_offer(request):

    if request.method == 'POST':
        titulo = request.POST['titulo']
        descripcion = request.POST['descripcion']
        cantidad = request.POST['cantKilos']
        valor = request.POST['valor']
        material = request.POST['material']
        imagenes = request.FILES['imagenes']
        usuario = request.user

        oferta = Oferta(titulo=titulo, descripcion=descripcion, cantidad=cantidad, valor=valor, material=material, usuario=usuario)
        oferta.save()

        for imagen in imagenes:
            
            img = ImagenesOferta.objects.create(imagen=imagen)
            oferta.imagenes.add(img)

这是我的表格片段,我认为这可能是问题所在:

<div class="col-xl-4">
                                        <div class="form-group">
                                            <label for="valor" class="form-label">Agregar valor</label>
                                            <input type="number" class="form-control form-control-user"
                                            id="valor" name="valor" placeholder="0.00$">
                                        </div>
                                    </div>

在美学和造型方面的问题上,我决定使用普通形式

推荐答案

我建议strongly使用ModelForm,因为这将执行必要的数据验证和清理.

from django import forms


class OfertaForm(forms.ModelForm):
    class Meta:
        model = Oferta
        fields = ('titulo', 'descripcion', 'cantidad', 'valor', 'material')

在HTML表单中,您只需将name="cantKilos"重命名为name="cantidad",但无论如何也没有太多理由使用不同的名称.

在视图中,我们可以简单地使用表单,如果您不想,您don't必须使用模板中的表单:

@login_required(login_url='login')
def publish_offer(request):
    if request.method == 'POST':
        form = OfertaForm(request.POST, request.FILES)
        if form.is_valid():
            form.instance.usuario = request.user
            offerta = form.save()
            imgs = [
                ImagenesOferta(imagen=imagen)
                for image in request.FILES.getlist('imagenes')
            ]
            ImagenesOferta.objects.bulk_create(imgs)
            oferta.imagenes.add(*img)
            return redirect('name-of-some-view')
    # otherwise this is a GET request, or the form was invalid
    # …

Django相关问答推荐

使用序列化器获取Django ORM auth_user. id数据

我找不到为什么我的DRF登录测试没有按预期工作

通过在其他查询中使用来过滤对象

Django Rest Framework 速率限制动态基于用户类型

在 Serverless + Lambda + API Gateway HTTP API 上运行的 Django 应用程序正在重写链接以使用默认前缀

如何在Django中制作一个不 Select 以前日期的日期 Select 器

Django:使用相同的外键在不同的应用程序中 Select 多个列

Django REST Framework 图片上传

NoReverseMatch 错误

如何验证对象是否存在于多线程中

PyMongo vs MongoEngine for Django

Django 不调用模型清理方法

清理提交的表单数据中的 HTML

Django:何时使用 QuerySet 无

如何从 Django 的 TabularInline 管理视图中省略对象名称?

django 模板列表变量中的最后一个元素

刷新时重新提交的django表单

ModelForm 上的 Django 和字段集

Django - 保存新对象时如何获取 self.id?

提供来自 django 的压缩内容