Мне было интересно, как мы можем получить доступ к данным пользователя в другой модели? Например, вот моя текущая ситуация.Доступ к аутентификации Информация пользователя в Django Model
- У пользователя есть иностранный ключ к компании; поэтому пользователь связан с компанией.
- Я внедрил страницу загрузки файла. На этой странице используется специальное решение для хранения, которое загружает файл в 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)
Это модель хранения данных, я установил, как мой default_storage в settings.py:
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)
От шаблона или шаблона, могу ли я передать его, есть аргумент и получить его позже? Могу ли я получить эту информацию непосредственно в модели? Есть идеи, как это сделать?
Спасибо!
EDIT: Это связано с пользователями, поскольку пользователь будет содержать ForeignKey к компании она связана с, и что компания будет содержать ведро вопрос ...
EDIT # 2: Я просто пытался self.object.user = self.request.user в form_save, и он работает, но как я могу выйти за рамки этого и получить доступ к полям, которые я добавил, когда я расширил User с помощью класса UserProfile? Например:
self.object.user = self.request.user
self.company = self.object.user.company.bucket
Таким образом, компания является foreign_key в расширенном профиле пользователя, а компания содержит поле ведра.
Я действительно смущен. Какое отношение это имеет к пользователям? Вы можете получить текущего пользователя из form_valid() с помощью self.request.user. Это то, что вам нужно? – Paragon
См. Править для получения дополнительных разъяснений! Спасибо – abisson
Вы ищете 'user.get_profile()'? https://docs.djangoproject.com/en/1.4/topics/auth/#django.contrib.auth.models.User.get_profile – rantanplan