python - Django 静态内联

标签 python django django-models django-admin

我有一个包含很多字段的模型 Student 和一个带有 ForeignKeyStudent 的模型 Document。我正在使用内联编辑Student的关联Document

模型.py:

class Document(models.Model):

    def media_path(instance, filename):
        return '{0}/{1}'.format(instance.Student.Id, filename)

    File = models.FileField(
        _('File'),
        upload_to=media_path,)

    Title = models.CharField(
        _('File Name'),
        max_length=32,
        blank=True,)

    Student = models.ForeignKey(
        Student,
        null=True,
        on_delete=models.SET_NULL)

    class Meta:
        verbose_name = _('Document')
        verbose_name_plural = _('Documents')

admin.py:

class DocumentInline(admin.TabularInline):
    model = Document
    extra = 0


class StudentAdmin(UserAdmin):
    ...
    inlines = [
        DocumentInline,
    ]

    class Meta:
        model = Student


admin.site.register(Student, StudentAdmin)

我想要的是在每次创建 Student 时添加 3 行具有特定 Title 的内联 Document 行,例如:

我刚刚创建了一个 Student,并且在 Document 内联部分中已经有 3 行,并且每行都有一个预定义的 Title (并且 File 显然是空的):

  • 文件 1
  • 文件 2
  • 文件 3

我怎样才能做这样的事情?

提前致谢。

最佳答案

您可以添加一个接收器来拦截保存后信号:

from django.db.models.signals import post_save
from django.dispatch import receiver

@receiver(post_save, sender=Student)
def create_default_docs(sender, instance, created, **kwargs):
    if created:
        for title in ['title1','title2','title3']:
            d = Document(title=title, student=instance)
            d.save()

此代码在学生模型保存后执行。如果模型刚刚创建,它将创建三个指定默认标题的文档。

需要注意的一件事是,您需要允许文件字段允许空值,因为目前它是必填字段。

关于python - Django 静态内联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40467082/

相关文章:

python - 删除重复项并重新排序字典

python - Django 书第 7 章

python-3.x - Django Rest 框架如何创建家庭并为该家庭分配成员,同时为每个成员分配角色

python - 没有外键的 Django 中的 Span 模型

python - 极坐标图 thetagrid 标签

python - 尝试创建一个 View 以将 booleanfield 设置为 true 但不更新

python - 解压以 ASCIIZ 字符串结尾的结构

python - 在 django "login() missing 1 required positional argument: ' 用户中出现此错误“”

python - 如何检查没有扩展名的文件类型?

python - python 脚本中的自动完成文件名