Django的管理员允许您轻松创建用于编辑模型及其外键的表单,但如果我在自己的视图中使用ModelForm,则无法完成此操作。这是admin.py中的一个例子:
class VendorPhotoInline(admin.StackedInline):
model = VendorPhoto
extra = 3
class VendorAdmin(admin.ModelAdmin):
inlines = [VendorPhotoInline]
admin.site.register(Vendor, VendorAdmin)
所以现在在管理员中,我可以创建一个供应商并添加一堆照片。但是对于非员工,我有一个用于创建供应商的表单,我想允许他们上传一些像管理员这样的照片。
我正在使用允许用户创建新供应商的ModelForm,但当然,他们无法在此时添加照片:
class VendorForm(ModelForm):
class Meta:
model = Vendor
如何在此处实现管理界面的平价?我愿意找到适用于新供应商实例的解决方案,并允许上传最多一定数量(例如3),但适用于现有实例并允许添加/删除照片的内容也很棒。谢谢你的帮助!
答案 0 :(得分:2)
您可以使用inline formsets。来自文档:
假设您有这两个模型:
from django.db import models
class Author(models.Model):
name = models.CharField(max_length=100)
class Book(models.Model):
author = models.ForeignKey(Author)
title = models.CharField(max_length=100)
如果要创建允许编辑书籍的表单集 属于特定作者,您可以这样做:
>>> from django.forms.models import inlineformset_factory
>>> BookFormSet = inlineformset_factory(Author, Book)
>>> author = Author.objects.get(name=u'Mike Royko')
>>> formset = BookFormSet(instance=author)
inlineformset_factory
处理幕后的事情,但对于前端部分,您可能会发现django-dynamic-formset jQuery plugin很有用。