2016-11-07 29 views
1

我有一個模型Student有很多字段和模型DocumentForeignKeyStudent。我正在使用內聯編輯Student s的關聯Document s。Django Static Inlines

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) 

我想是每個創建Student時間加3直列Document線,具體Title,因此,例如:

我剛剛創建了一個Student,並且我在Document inline節a中已經有3行ND每一個與預定義Title(和File顯然是空的):

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

我怎麼能做出這種事情?

在此先感謝。

回答

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() 

該代碼被執行。如果該模型剛創建完成,它將創建三個文檔,並指定默認標題。

有一點需要注意,您需要允許您的文件字段允許空值,因爲目前它是必填字段。

+0

對不起,我只是從來沒有使用過信號,我應該在哪裏放這段代碼? – AnDrOiD

+0

不用擔心。您可以將其添加到您的models.py文件 – tdsymonds

+0

似乎不起作用。我試圖在我的管理員中創建一個'Student',並且內嵌的'Document'部分沒有改變。 – AnDrOiD