假设你有一个带有FileField的模型形式:
class Book(models.Model):
book_title = models.CharField(max_length = 100, blank = False, null = False)
book_teaser = models.FileField(blank = True, null = True)
author = models.ForeignKey(related_name = 'books', blank = True, null = True)
...
class Author(models.Model):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete = models.CASCADE, null = True, blank = True)
...
Book模型与User模型没有直接关系。如果您要在以下位置上传PDF文件:
user/books/ # app_name is books
如何在views.py中指定upload_to位置。文档展示了如何使用静态地址(对我来说不起作用)或者可调用来指定models.py中的上传位置:
def user_directory_path(instance, filename):
# file will be uploaded to MEDIA_ROOT/user_<id>/<filename>
return 'user_{0}/{1}'.format(instance.user.id, filename)
class MyModel(models.Model):
upload = models.FileField(upload_to=user_directory_path)
但是,与文档的示例不同,该模型没有直接的外键才能使用
instance.user.id
那么,您如何从views.py中指定上传位置,具体取决于用户在网站上查看的内容?
答案 0 :(得分:0)
您可以使用instance.author.user.id
,它应该可以正常工作。
在评论后修改
def user_directory_path(instance,request, filename):
loggeduserid = request.user.id
return 'user_{0}/{1}'.format(looggeduserid, filename)