python - 我怎样才能在模型表单中拥有相当于 django 的管理内联功能?

标签 python django django-forms django-admin django-views

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/

相关文章:

python - 下载 twitch.tv 流的第一帧

python - Unpickle 使用 SQLAlchemy pickle 的元素 "by hand"

python - 在python中添加具有相同运算符的lambda函数

django - 从 AbstractUser 继承的模型不会散列密码字段

python - 如何修复模型尚未加载

database - Django:级联 on_delete 选项不起作用

Azure 上的 Django 应用程序未获取静态文件

python - sendfile() 失败 (32 : Broken pipe) while sending request to upstream nginx 502

python-3.x - Django 模型选择文本字段映射

django - 从内联表单 clean() 访问父表单的cleaned_data