2013-05-28 46 views
0

如何访问信号中的path_after字段?如何从信号中的其他模型访问该字段?

型号:

class Store(models.Model): 
    user = models.ForeignKey(User) 
    path = models.FileField(upload_to="src") 
    path_after = models.FileField(upload_to="files",blank=True, null=True) 

class Document(models.Model): 
    rootfile = models.ForeignKey(Store) 
    content = models.TextField() 

信号:

@receiver(post_save, sender=Store) 
def my_handler(sender, **kwargs): 
    if kwargs['created']: 
     document = Document() 
     document.rootfile = kwargs['instance'] 

     #how to open file from path_after field? 
     text_file = open("path_after", "r") 

     document.content = #should be text from path_after file, this is TextField 
     document.save() 

回答

2

你在这是Store对象的信号处理获得instance它具有path_after领域。您可以直接访问它:

@receiver(post_save, sender=Store) 
def my_handler(sender, **kwargs): 
    if kwargs['created']: 
     document = Document() 
     document.rootfile = kwargs['instance'] 

     #how to open file from path_after field? 
     text_file = open(kwargs['instance'].path_after.path, "r") 
     ... 
+0

大。感谢'强制Unicode:需要字符串或缓冲区,找到FieldFile'。我无法读取此文件。如何解决它? – user2426362

+0

@ user2426362,确保你正在使用'kwargs ['instance'] .path_after.path'打开文件。最后''.path'很重要,它给你所需的文件路径。 – Rohan

1
@receiver(post_save, sender=Store) 
def my_handler(sender, instance, *args, **kwargs): 
    if kwargs['created']: 
     document = Document() 
     document.rootfile = instance 

     #how to open file from path_after 
     text_file = open(instance.path_after, "r") 

     document.content = #should be text from path_after file, this is TextField 
     document.save() 
相关问题