我正在创建一个允许用户在线存储文件的 Web 应用程序,例如 Dropbox。用户的文件由模型 Item 建模:
from django.db import models
from django.contrib.auth.models import User
class Item(models.Model):
# Name of file
name = models.CharField(max_length=200)
# Site user who owns the file
user = models.ForeignKey(User)
# Path to file in database
# Python complains here since "username" is an attribute of the User class, not
# an attribute of ForeignKey.
file = models.FileField(upload_to=(user.username + '/' + name))
现在,如果您查看 FileField 的 upload_to 参数,我想指定文件在我的数据库中的存储位置。如果我有一个带有文件“myfile”的用户“bill”,他的文件应该在路径“bill/myfile”下。
为了得到这个字符串,我尝试了“user.username + '/' + name”,但是python抱怨用户没有属性用户名,因为用户不是用户对象:它是一个存储用户的外键。所以问题是,如何在代码中从 ForeignKey 获取用户对象?
现在关于 Django 的数据库 API 不起作用,因为在我可以使用 API 之前必须将对象保存到数据库中。情况并非如此,因为我在构建 Item 对象期间需要数据。