Django: выходной видеофайл, связанный с конкретным пользователем - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть имя модели customuser Profile и модели VideoFile с соответствующими полями для User.Есть много пользователей, и каждый из них может добавить много видео файлов.Мне нужно показать на templates.html user.nickname и все его видеофайлы.

user.models.py

class Profile(models.Model):

    user = models.OneToOneField(User, on_delete=models.CASCADE, null=True)
    nickname = models.CharField(max_length=30, blank=True, verbose_name="Никнэйм")        
    userpic = models.ImageField(upload_to='userpics/', blank=True, null=True)

videofile.models.py

class VideoFile(models.Model):
    name = models.CharField(max_length=200,blank=True)
    file = models.FileField(upload_to="vstories/%Y/%m/%d", validators=[validate_file_extension])
    date_upload = models.DateTimeField(auto_now_add = True, auto_now = False, blank=True, null = True)
    descriptions =  models.TextField(max_length=200)
    reports = models.BooleanField(default=False)
    vstories = models.ForeignKey(Profile, blank = True, null = True) 

просмотров.py

def vstories (request):
    profiles = Profile.objects.all()        
    return render(request, "vstories/vstories.html", {'profiles':profiles})  

templates.html

{% extends "base.html" %}
{% block content %}

{% if users %}
{% for user in users %}

<p>{{ user.profile.nickname}}</p>

{% for vstorie in vstories %}
<p>{{ vstorie.vstories.url }}</p>
{%  endfor %}

{%  endfor %}
{% endif %}
{% endblock content %}

С видео я запутался.А может я выбрал неправильный способ общения моделей?

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Эта работа для меня

{% for profile in profiles %}
    {{ profile.nickname }}

    {% for videofile in profile.videofile_set.all %}
        <video width="320" height="240" controls src="{{ videofile.file.url }}">
          Your browser does not support the video tag.
        </video>
    {%  endfor %}

{%  endfor %}
0 голосов
/ 25 апреля 2018

Вы можете искать внешние ключи «назад». В этом случае для доступа ко всем видео пользователя (профиля) необходимо иметь все профили:

def vstories (request):
    profiles = Profile.objects.all() 
    return render(request, "vstories/vstories.html",{'profiles':profiles})   

Затем в шаблоне вы можете получить доступ к отношениям между Profile и VideoFile «назад».

{% for profile in profiles %}
    {% for videofile in profile.videofile_set.all %}
        <p>{{ videofile.file.url }}</p>
    {%  endfor %}
{%  endfor %}

Хитрость в том, что "_set" позволяет вам следить за отношениями в обратном направлении.

Вот документация для этого вида набора запросов: https://docs.djangoproject.com/en/2.0/topics/db/queries/#following-relationships-backward

...