1

別のモデルでユーザーのデータにアクセスするにはどうすればよいのでしょうか? たとえば、これが私の現在の状況です。

  • ユーザーは会社へのforeignKeyを持っています。したがって、ユーザーは会社に関連付けられます。
  • ファイルアップロードページを実装しました。このページでは、ファイルを Amazon S3 にアップロードするカスタム ストレージ ソリューションを使用します。(S3BotoStorage に基づいています)。
  • このコンストラクター内で、会社がユーザーにリンクされているこの会社に関連付けられているbucket_nameにアクセスしたいと考えています。アップロード ページを使用するには、すべてのユーザーがログインする必要があります。
  • つまり、ログインしたユーザーは会社へのforeignKeyを持ち、会社はbucket_nameを持っています。ログインしたユーザーは、ファイルのアップロード ページにいます。

これはビューです:

class PictureCreateView(CreateView):
    model = Picture

    def __init__(self, *args, **kwargs):
        super(PictureCreateView, self).__init__(*args, **kwargs)


    def form_valid(self, form):    
        self.object = form.save()
        self.request.FILES.get('file')
        data = [{'name': f.name, 'url': settings.MEDIA_URL + "pictures/" + f.name.replace(" ", "_"), 'thumbnail_url': settings.MEDIA_URL + "pictures/" + f.name.replace(" ", "_"), 'delete_url': reverse('upload-delete', args=[self.object.id]), 'delete_type': "DELETE"}]
        response = JSONResponse(data, {}, response_mimetype(self.request))
        response['Content-Disposition'] = 'inline; filename=files.json'
        return response

これは画像モデルです(ファイルモデルなど)

from django.core.files.storage import default_storage as s3_storage

class Picture(models.Model):

    def custom_upload_to(instance, filename):
        return 'pictures/' + filename        

    def save(self, *args, **kwargs):
        super(Picture, self).save(*args, **kwargs)

    file = models.FileField(storage=s3_storage,upload_to=custom_upload_to)

これは、settings.py で default_storage として設定したストレージ モデルです。

from storages.backends.s3boto import S3BotoStorage

class customStorage(S3BotoStorage):
    def __init__(self, *args, **kwargs):
        kwargs['bucket'] = ***HERE-I-WANT-TO-GET-COMPANY'S-BUCKET***
        super(customStorage, self).__init__(*args, **kwargs)

from またはテンプレートから、引数を渡して後で取得できますか? この情報をモデル内で直接取得できますか? これを行う方法についてのアイデアはありますか?

ありがとう!

編集: ユーザーにはリンク先の会社への ForeignKey が含まれ、その会社には問題のバケットが含まれるため、これはユーザーと関係があります...

編集 #2: form_save でself.object.user = self.request.userを試してみましたが、それを超えて UserProfile クラスで User を拡張したときに追加したフィールドにアクセスするにはどうすればよいですか? 例えば:

self.object.user = self.request.user
self.company = self.object.user.company.bucket 

したがって、Company はユーザー拡張プロファイル内のforeign_key であり、company にはバケット フィールドが含まれています。

4

1 に答える 1

0

ユーザーを変更することはできないので、外部キーはプロファイルにあると思います。おそらくself.request.userを使用したいと思うでしょう。get_profile() .company.bucket。AUTH_PROFILE_MODULEsettings.pyで設定して、プロファイルモジュールが正しく構成されていることを確認してください

于 2012-05-07T17:54:03.800 に答える