2009-11-26 2 views
2

Моя модель:Как я могу заказать GenericForeignKey?

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.BooleanField(default=False) 

class Meta: 
    ordering = ["-following__created_at"] 

Этот порядок не работает. Каков правильный способ настройки заказа по умолчанию на основе GenericForeignKey?

ответ

1

Не возможно потому, что нет возможности получить какие таблицы должны быть соединены (и соединены таблицы не могут содержать created_at поле)

Раствор может быть денормализация:

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 (__) 
Смежные вопросы