我有以下关系模型:
class Anuncio(models.Model):
anunciante = models.ForeignKey(User, verbose_name=_("anunciante"), on_delete=models.CASCADE, null=True)
titulo = models.CharField(_("titulo del anuncio"), max_length=50)
class Producto(models.Model):
nombre = models.CharField(_("nombre del producto"), max_length=50)
anuncio = models.ForeignKey(Anuncio, on_delete=models.CASCADE, related_name='products', blank=True, null=True)
class Imagen(models.Model):
producto = models.ForeignKey(Producto, on_delete=models.CASCADE, related_name='imagen', blank=True, null=True)
imagen = models.ImageField(upload_to='marketplace/')
我有一个表单,它允许添加具有适当关系的所有三个模型的示例。这工作正常,但我尝试添加一个特性,将额外的Producto
和Imagen
示例添加到同一个Anuncio
。我用JavaScript渲染额外的表单,渲染结果正常。但是我无法保存其他表单的数据。这是Anuncio
的主创建视图:
def anunciocreateview(request):
if request.method == "POST":
anuncio_form = AnuncioForm(request.POST or None)
producto_form = ProductoForm(request.POST or None)
imagen_form = ImagenForm(request.POST, request.FILES)
if all([anuncio_form.is_valid(), producto_form.is_valid(), imagen_form.is_valid()]):
anuncio = anuncio_form.save(commit=False)
anuncio.anunciante = request.user
anuncio.save()
producto = producto_form.save(commit=False)
producto.anuncio = anuncio
producto.save()
imagen = request.FILES.get('imagen')
if imagen:
Imagen.objects.create(producto=producto, imagen=imagen)
return HttpResponse(status=204, headers={'HX-Trigger' : 'eventsListChanged'})
else:
print(anuncio_form.errors)
print(producto_form.errors)
print(imagen_form.errors)
else:
anuncio_form = AnuncioForm()
producto_form = ProductoForm()
imagen_form = ImagenForm()
context = {
'anuncio_form' : anuncio_form,
'producto_form' : producto_form,
'imagen_form' : imagen_form
}
return render(request, 'buyandsell/formulario.html', context)
这是关于附加的仅Producto
和Imagen
表单的视图:
def create_product(request):
if request.method == "POST":
producto_form = ProductoForm(request.POST or None)
imagen_form = ImagenForm(request.POST, request.FILES)
if all([producto_form.is_valid(), imagen_form.is_valid()]):
producto = producto_form.save()
imagen = request.FILES.get('imagen')
if imagen:
Imagen.objects.create(producto=producto, imagen=imagen)
return HttpResponse("Product added.")
else:
producto_form = ProductoForm()
imagen_form = ImagenForm()
context = {
'producto_form' : producto_form,
'imagen_form' : imagen_form
}
return render(request, 'buyandsell/partials/producto-form.html', context)
第一个视图保存了数据,但是附加的表单没有保存。我也试过查看表单集,但是我也没有弄清楚如何才能完成这样的任务。
1条答案
按热度按时间xeufq47z1#
你可以使用
formset
来完成这个任务。要了解更多信息,你可以在这里查看Django关于表单集的文档:Formsets in Django