jsj
jsj

Reputation: 9381

django: Models with multiple Foreign Key queries

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

Answers (1)

catherine
catherine

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

Related Questions