I have the following models in Django (simplified for brevity):
class DistinctWord(models.Model):
...
class Word(models.Model):
distinct_word = models.ForeignKey('DistinctWord', related_name='words')
...
class UserWord(models.Model):
distinct_word = models.ForeignKey(DistinctWord, related_name='user_words')
...
In words: DistinctWord is the root of words derived from each other (e.g., silly, sillier, silliest), and UserWord is the user's dictionary. So, when a user adds a Word to the his dictionary he actually adds the root word (and thus all related words). So, I must bring an actual Word (e.g., the first one) when he requests to see/study the words in his dictionary.
That is, for a given queryset of UserWords (say uw
), I would like to retrieve the first Word related for each row in that queryset (preferably in one or a few trips to the database, not one for each row). This would be a simple join, group by and limit 1 in raw sql, but I could not wrap my head around it in Django.