首页 > 解决方案 > Django:输出与特定用户关联的视频文件

问题描述

我有自定义用户模型名称 Profile 和 VideoFile 模型,其中包含与用户相关的字段。有许多用户帐户,每个用户都可以添加很多视频文件。我需要在 templates.html user.nickname 和他所有的视频文件中显示。

用户模型.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)

视频文件.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})  

模板.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 %}

看到视频,我很困惑。或者我选择了错误的方式来传达模型?

标签: djangodjango-modelsdjango-templatesdjango-views

解决方案


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

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


推荐阅读