2012-02-26 15 views
0

Django-filetransferを使用してファイルをアップロードしようとしていますが、アップロードが保存されているファイルの名前として使用するユーザー名をインポートする方法が不思議でした。 User.usernameを使用していますが、無効です。大きな疑問は、models.pyからユーザーの属性にアクセスする方法です。Djangoファイル転送各ユーザーの新しいファイルに保存

from django.db import models 
from django.contrib.auth.models import User, UserManager 

class UploadModel(User,models.Model): 
    title = models.CharField(max_length=64, blank=True) 
    user = models.ForeignKey(User) 
    file = models.FileField(upload_to='./uploads/'+str(User.username)) 


    @property 
    def filename(self): 
    return self.file.name.rsplit('/', 1)[-1] 

が更新 アプリ/アップロード/ models.py

from django.db import models 
from django.contrib.auth.models import User, UserManager 

def uploadmodel_file_upload_to(instance, filename): 
    return 'uploads/%s/%s' % (instance.user.username, filename) 

class UploadModel(models.Model): 
    user = models.ForeignKey('auth.user') 
    file = models.FileField(upload_to=uploadmodel_file_upload_to) 

TemplateSyntaxErrorで/レンダリング中 キャッチDatabaseErrorをアップロード:列upload_uploadmodel.user_idが存在しない以下の私のmodels.pyです LINE 1:SELECT "upload_uploadmodel"。 "id"、 "upload_uploadmodel"。 "user ...

+0

なぜUploadModelがユーザーから継承していますか? – jpic

答えて

3

モデル属性は正式にPyt honはmodels.pyコードを解析します。あなたは例えば、ユーザー関連のインスタンスを使用して、アップロードファイルのパスを生成するために、upload_toのコールバックを使用する必要があります。

def uploadmodel_file_upload_to(instance, filename): 
    return 'uploads/%s/%s' % (instance.user.username, filename) 

class UploadModel(models.Model): 
    user = models.ForeignKey('auth.user') 
    file = models.FileField(upload_to=uploadmodel_file_upload_to) 
+0

私はこのコードをmodels.pyに入れ、コンソールに "NameError:name 'uploadmodel_file_upload_to'が定義されていません。 – user784756

+0

あなたはそれを貼り付けなかった(私はこのコードをテストした)。更新されたmodels.pyとトレースバックを投稿してください。おそらく、あなたはそれを参照するFileField定義の前に** uploadmodel_file_upload_to定義**を貼り付けていませんでした。したがって、NameError。 – jpic

+0

編集されました。ご協力いただきありがとうございます。申し訳ありませんが、私は何かが明らかでない場合。 – user784756

関連する問題