我有两个模型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)来处理两个单一视图的表单,我已经做了以下的解决办法:
哪种方法更好?
views.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添加图像时,还没有创建清单。
发布于 2018-06-05 18:43:09
我将提出我的解决方案,我已经在我的项目和工作的魅力。
pk
(或其他唯一标识符)。pk
并存储在隐藏的输入中(用于ex )。名为images
),具有某种协议(用于ex )。pk1::pk2::pk3
)images = ListingImage.objects.filter(pk__in=request.POST.get('images').split('::'))
获取条目。
我强烈建议对images
应用更多的验证。查询将为提交的表单提供所有用户上传的图像,最后将更新ListingImage
条目以链接Listing
条目images.update(listing=newly_created_listing_entry)
。此外,为了避免db膨胀,我每1天运行cron作业来清理没有链接到任何表单的图像(以防用户放弃表单提交)。
霍普,这有帮助
https://stackoverflow.com/questions/50704080
复制相似问题