在Django管理员中同一表单中添加对象及其相关对象
我有这些模型:
class Gallery(models.Model):
HeadImage = models.ImageField(upload_to="gallery")
class Image(models.Model):
Image = models.ImageField(upload_to="gallery")
Gallery = models.ForeignKey(Gallery, related_name='images',blank=True)
class Agency(models.Model):
# some fields ...
Gallery=models.ForeignKey(Gallery)
现在我想在添加一个代理机构(Agency)时,不想只显示一个简单的下拉框来选择画廊(Gallery)字段,而是想要一些更好的东西:
我希望在画廊模型中的HeadImage
字段有一个文件上传功能,并且在图片模型中的Image
字段有一组文件上传功能。也就是说,我想在一个表单里同时添加一个代理机构(Agency)及其相关的对象(与代理机构相关的画廊和与画廊相关的图片)。我该怎么做呢?我在网上搜索了很多,但没有找到解决办法,这真是个让人头疼的问题。
补充说明:我想在同一个表单里保存一个画廊及其一组图片,同时保存代理机构及其画廊。
谢谢任何帮助!
1 个回答
1
正如我在上面的评论中提到的,你在Django的管理后台里尝试做的事情有点多。
从你其他的问题来看,你已经熟悉了写自己视图所需的工具。你可以为你的模型定义表单,把它们放在同一个表单标签里。如果表单有效,就用commit=False
保存,然后再处理外键。
这里有一个简单的视图示例,可以同时添加一个Agency
和一个Gallery
。你也可以很容易地同时添加一组图片的表单。
def add_agency(request):
if request.method == "POST":
agency_form = AgencyForm(data=request.POST, prefix="agency")
gallery_form = GalleryForm(data=request.POST, prefix="gallery")
if agency_form.is_valid() and gallery_form.is_valid():
gallery = gallery_form.save()
agency = agency_form.save(commit=False)
agency.gallery = gallery
agency.save()
return HttpResponseRedirect(next_url)
else:
# left as an exercise
如果你想要一个两步的表单,我建议你看看formwizard。这是一个独立的应用,适用于Django版本<=1.3.X,而在Django版本>=1.4中已经包含。