How can I order by GenericForeignKey?
My model is:
class Subscription(models.Model):
user = models.ForeignKey(User, related_name='subscription', editable=False)
following_content_type = models.ForeignKey(ContentType, editable=False)
following_id = models.PositiveIntegerField(editable=False)
following = generic.GenericForeignKey('following_content_type', 'following_id')
created_at = models.DateTimeField(auto_now_add=True, editable=False)
email_notification = models.Boole开发者_如何学JAVAanField(default=False)
class Meta:
ordering = ["-following__created_at"]
This ordering isn't working. What's the proper way to setup default ordering based on a GenericForeignKey?
Not possible because no way to retrieve what table should be joined (and joined tables may not contain created_at field)
The solution can be denormalization:
class Subscription(models.Model):
[...]
following_created_at = models.DateTimeField(editable=False)
def save(self, *args, **kwargs):
following_created_at = following.created_at #that's the trick
super(Subscription, self).save(*args, **kwargs)
class Meta:
ordering = ["-following_created_at"] # Note that there is not dobuble underline (__)
精彩评论