2

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 个)的解决方案,但适用于现有实例并允许添加/删除照片的解决方案也很棒。谢谢你的帮助!

4

1 回答 1

2

您可以使用内联表单集。从文档中:

假设你有这两个模型:

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 插件很有用。

于 2013-08-23T23:42:24.197 回答