我有两个模型Listing
和Image
,其中一个列表可以有多个图像。你知道吗
class Listing(models.Model):
title = models.CharField(max_length=100, blank=False)
class ListingImage(models.Model):
listing = models.ForeignKey(Listing, on_delete=models.CASCADE, related_name='images')
image = models.ImageField(blank=True)
理想情况下,我想在一个页面上创建这样的列表,例如填写所有表单信息并在同一页面上添加图像。你知道吗
这似乎是不可能的(如果是请让我知道,但请注意dropzone.js文件是Ajax)使用单个视图处理2个窗体,我做了以下变通方法:
哪种方法更好?
视图.py
def add_image(request):
# process images: problem we have no listing_instance to add them to
if request.method == 'POST':
form = ListingImageForm(request.POST, request.FILES)
if form.is_valid():
ListingImage.objects.create(pk=None, listing=listing_instance)
return HttpResponse(
json.dumps({
"result": True,
}),
content_type="application/json"
)
我在找方法学方面的建议。例如,要创建带有图像的列表,我需要先创建列表然后添加图像(2个步骤)还是先添加图像然后添加列表信息?我的问题是,如果我这样做了,当我使用Ajax添加图像时,列表还没有创建。你知道吗
我会提出我的解决方案,我已经在我的项目中实施,并像一个魅力工程。你知道吗
pk
(或其他唯一标识符)。你知道吗pk
,并使用某种协议(例如pk1::pk2::pk3
)存储在隐藏的输入中(例如名为images
)images = ListingImage.objects.filter(pk__in=request.POST.get('images').split('::'))
我强烈建议对
images
值应用更多验证 此查询将为提交的表单提供所有用户上载的图像,最后将ListingImage
条目更新为链接Listing
条目images.update(listing=newly_created_listing_entry)
另外,为了避免数据库膨胀,我每1天运行一次cron job来清理没有链接到任何表单的图像(以防用户放弃表单提交)
希望,这有帮助
相关问题 更多 >
编程相关推荐