Reputation: 9381
I have finished a proof-of-concept django project and now want to redesign the models to be more robust.
The basic model is called a PhraseRequest
:
class PhraseRequest(models.Model):
user = models.ForeignKey(User)
timestamp = models.DateTimeField()
phrase = models.TextField()
Now the complication comes in that one PhraseRequest
has a bunch of associated models, PhraseRequestVote
, Phrase
(a response), PhraseRequestComment
&c.
Now when I list say, the top ten Phrase Requests in order of votes, my template has a for-each loop which is fed the ten PhraseRequest objects. It then populates the HTML with the request, and all it's associated data.
So far I have been adding to each PhraseRequest
's dictionary to achieve this:
for r in phrase_requests:
r.votes = PhraseRequestVote.objects.filter(request=r)
r.n_votes = sum([v.weight for v in r.votes])
r.comments = PhraseRequestComment.objects.filter(request=r)
#and so on
Intuitively, this doesn't seem right - There must be a "correct" way to do this. Do I need to redesign the models? The query?
Upvotes: 0
Views: 75
Reputation: 22808
You can make function in your model and order it in your view. Like this
models.py
class model_name(models.Model)
........
def votes(self):
return Vote_Name.objects.filter(phrase_id=self).count()
Upvotes: 1