我有一个包含很多字段的模型 Student
和一个带有 ForeignKey
到 Student
的模型 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/