如何在django模型中获得当前用户?

时间:2015-10-07 12:47:07

标签: python django django-models django-views

我正在尝试创建一个动态文件夹来为每个用户存储一些csv文件。 我有DemoUser和Document。这是1到N的关系。 我想将用户的所有文档存储在其文件夹中,以用户ID命名。

然而,我无法弄清楚如何做到这一点。我无法获得所有者的名字。

这是我的代码:

models.py

def get_upload_path(instance, filename):
    now = timezone.now().strftime("%Y_%m_%d")
    if(instance.owner.id is not None):
        return 'graphs/documents/{0}/email/' + now +'_{1}'.format(instance.owner.id, filename)

class Document(models.Model):
    docfile = models.FileField(upload_to=get_upload_path, validators=[import_document_validator])
    owner = models.ForeignKey(DemoUser)
    date_published = models.DateTimeField(_('date published'), default=timezone.now)

views.py:

if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES)
    if form.is_valid():
        newdoc = Document(owner=DemoUser.objects.get(id=request.user.id))
        newdoc.save()
        newdoc.docfile = request.FILES['docfile']
        newdoc.save()

文件已上传,但地址为:

  

图形/文档/ {0} /email/2015_10_07_MOCK_DATA_2_qyt9xGe.csv

它没有获得instance.owner.id值。我尝试在添加docfile之前保存Document以尝试将所有者设置为该对象并获取owner.id值但没有成功。你能帮我吗?

非常感谢你!

2 个答案:

答案 0 :(得分:1)

应该是:

install.packages("devtools", lib="~/R/lib")

答案 1 :(得分:0)

我发现为每个用户创建存储文件的动态目录的一个简单方法是为模型创建一个新方法,该方法将字符串分配给表示用户名的实例。这仅适用于这样的简单情况,您需要将当前用户作为字符串来帮助格式化文件路径。

#models.py
def get_upload_path(instance, filename):
    now = timezone.now().strftime("%Y_%m_%d")
    return 'graphs/documents/{0}/email/{1}_{2}'.format(instance.owner, now, filename)

class Document(models.Model):
    docfile = models.FileField(upload_to=get_upload_path)
    date_published = models.DateTimeField(_('date published'), default=timezone.now)

    def keep_owner(self,owner):
        self.owner = owner

#views.py
if request.method == 'POST':
    form = DocumentForm(request.POST, request.FILES)
    if form.is_valid():
        newdoc = form.save(commit=False)
        newdoc.keep_owner(request.user)
        newdoc.save()