#python #django #python-2.7 #django-authentication #django-allauth
#python #django #python-2.7 #django-аутентификация #django-allauth
Вопрос:
Как мне показать только пользовательские файлы, которые они загружают (не все) Я использую python 2.7 и django 1.7 с django allauth. Ниже приведена моя модель. Если кто-нибудь может указать мне правильное направление, спасибо.
models.py
def hashed_uploads_dirs(instance, filename):
return os.path.join(instance.md5, filename)
class File(models.Model):
f = models.FileField(upload_to='.')
md5 = models.CharField(max_length=32)
created_at = models.DateTimeField(auto_now_add=True)
def was_published_recently(self):
return self.created_at >= timezone.now() - datetime.timedelta(days=1)
was_published_recently.admin_order_field = 'created_at'
was_published_recently.boolean = True
was_published_recently.short_description = 'Published recently?'
def __unicode__(self):
return self.f.name
@models.permalink
def get_absolute_url(self):
return ('file-add', )
def save(self, *args, **kwargs):
self.slug = self.file.name
super(File, self).save(*args, **kwargs)
def delete(self, *args, **kwargs):
"""delete -- Remove to leave file."""
self.file.delete(False)
super(File, self).delete(*args, **kwargs)
Комментарии:
1. Хорошим началом было бы сохранение внешнего ключа для того, кто загрузил файл в вашей файловой модели..
Ответ №1:
Вам нужно изменить свой класс файла, чтобы сохранить внешний ключ для пользователя. Это должно выглядеть так
...
from django.contrib.auth.models import User
class File(models.Model):
f = models.FileField(upload_to='.')
md5 = models.CharField(max_length=32)
created_at = models.DateTimeField(auto_now_add=True)
user = models.ForeignKey(User, related_name='uploaded_files')
...
Когда вы загружаете файл, вам также нужно будет указать пользователя перед сохранением файла. Затем, когда у вас есть экземпляр User, вы можете получить все загруженные файлы с помощью user.uploaded_files .
Ответ №2:
Создайте новое поле в файле: user = models.ForeignKey(User)
Затем вы можете сделать
file.user = request.user
file.save()
в функции, которая обрабатывает загрузку файла