Django 的管理允许您轻松创建用于编辑模型及其外键的表单,但如果我在自己的 View 中使用 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)的解决方案,但适用于现有实例并允许添加/删除照片的解决方案也很棒。感谢您的帮助!
最佳答案
您可以使用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有用。
关于python - 我怎样才能在模型表单中拥有相当于 django 的管理内联功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18413303/