Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取/呈现一对多关系的最佳方式是什么?_Python_Django - Fatal编程技术网

Python 获取/呈现一对多关系的最佳方式是什么?

Python 获取/呈现一对多关系的最佳方式是什么?,python,django,Python,Django,我有两个模型,看起来像这样: class Entry(models.Model): user = models.ForeignKey(User) dataname = models.TextField() datadesc = models.TextField() timestamp = models.DateTimeField(auto_now=True) class EntryFile(models.Model): entry = models.ForeignKey(Entry)

我有两个模型,看起来像这样:

class Entry(models.Model):
user = models.ForeignKey(User)
dataname = models.TextField()
datadesc = models.TextField()
timestamp = models.DateTimeField(auto_now=True)

class EntryFile(models.Model):
    entry = models.ForeignKey(Entry)
    datafile = models.FileField(upload_to="uploads/%Y/%m/%d/%H-%M-%S")
我想为特定用户呈现所有条目及其相关文件。 现在,在我看来,我是这样做的,以获得这些值:

    entries = Entry.objects.filter(user=request.user).order_by("-timestamp")
    files = {}
    for entry in entries:
        entryfiles = EntryFile.objects.filter(entry=entry)
        files[entry] = entryfiles
    return render_to_response("index.html", {'user': request.user, 'entries': entries, 'files': files, 'message': message})
但我无法/不知道如何使用模板中的这些数据。这就是我现在所做的,但不起作用:

{% for entry in entries %}
    <td>{{ entry.datadesc }}</td>
    <td><table>
        {{ files.entry }}
        {% for file in files.entry %}
        <td>{{ file.datafile.name|split:"/"|last }}</td>
        <td>{{ file.datafile.size|filesizeformat }}</td>
        <td><a href="{{ object.datafile.url }}">download</a></td>
        <td><a href="{% url main.views.delete object.id %}">delete</a></td>
        {% endfor %}
    </table></td>
{% endfor %}
{%for entries%}
{{entry.datadesc}
{{files.entry}
{files.entry%}
{{file.datafile.name | split:“/”| last}
{{file.datafile.size}filesizeformat}
{%endfor%}
{%endfor%}
任何人都可以告诉我,我在视图中的操作方式是否正确,然后如何在模板中访问这些数据


谢谢大家!

只需将视图代码剪切到以下行:

entries = Entry.objects.filter(user=request.user).order_by("-timestamp")
entry = models.ForeignKey(Entry)
并在模板中执行此操作:

{% for entry in entries %}
    <td>{{ entry.datadesc }}</td>
    <td><table>
    {% for file in entry.entryfile_set.all %}
        <td>{{ file.datafile.name|split:"/"|last }}</td>
        <td>{{ file.datafile.size|filesizeformat }}</td>
        <td><a href="{{ object.datafile.url }}">download</a></td>
        <td><a href="{% url main.views.delete object.id %}">delete</a></td>
    {% endfor %}
    </table></td>
{% endfor %}
为此:

entry = models.ForeignKey(Entry, related_name='files')
然后,您可以通过更改以下内容来访问特定条目的所有文件:

{% for file in files.entryfile_set.all %}
更具可读性/更明显的是:

{% for file in entry.files.all %}

没问题。欢迎来到这个网站。