2009-06-01 40 views
2

我有2種型號,看起來像:獲取/呈現一對多關係的最佳方式是什麼?

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

任何人都可以告訴我,如果我考慮這樣做的正確方法,然後如何在模板中訪問這些數據?

謝謝!

回答

5

就砍你的視圖代碼這一行:

entries = Entry.objects.filter(user=request.user).order_by("-timestamp") 

而且在模板中做到這一點:

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

我在模型中使用related_name,但是一個大風扇,所以你可以改變這一行:

entry = models.ForeignKey(Entry) 

要這樣:

entry = models.ForeignKey(Entry, related_name='files') 

然後,你可以通過改變這個訪問所有文件中的特定條目:

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

要更具可讀性/顯而易見的:

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

它現在偉大的工作。謝謝! – 2009-06-01 05:27:57

相關問題