我的模型Student
包含大量字段,模型Document
包含ForeignKey
到Student
。我使用内联编辑Student
s'关联Document
s。
models.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)
我想要的是每次创建Document
时添加3条带有特定Title
的内联Student
行,例如:
我刚刚创建了Student
,我在Document
内联部分已经有3行,每行都有一个预先定义的Title
(而File
显然是空):
我该怎么做?
提前致谢。
答案 0 :(得分:2)
您可以添加接收器来拦截保存后信号:
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()
此代码在学生模型保存后执行。如果刚刚创建了模型,它将创建具有指定默认标题的三个文档。
有一点需要注意,您需要允许您的文件字段允许空值,因为它是必填字段。