Django:输出与特定用户关联的视频文件

时间:2018-04-25 10:32:21

标签: django django-models django-templates django-views

我有自定义用户模型名称Profile和VideoFile模型以及User的相对字段。有许多用户帐户,每个帐户都可以添加大量视频文件。我需要在templates.html user.nickname和他所有的videofiles上显示。

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) 

views.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 :(得分:1)

您可以查找外键&#34;后退&#34;。在这种情况下,要访问用户(个人资料)的所有视频,您需要拥有所有个人资料:

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

然后,在模板中,您可以访问Profile和VideoFile之间的关系&#34;向后&#34;。

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

诀窍在&#34; _set&#34;这允许你向后追随关系。

以下是此类查询集的文档: [Python]: Arrays

答案 1 :(得分:1)

这项工作对我来说

{% 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 %}