django过滤所有通用外键?

时间:2015-08-12 23:30:42

标签: python django django-models django-orm

我有2个表,第三个带有Generic外键,基本上将表一连接到两个。

class InternalOffer(models.Model):
    user = models.ForeignKey('User')
    (offer data...)
    relation = GenericRelation(OfferJoin, related_query_name='offer')

class ExternalOffer(models.Model):
    user = models.ForeignKey('User')
    (offer data...)
    relation = GenericRelation(OfferJoin, related_query_name='offer')

class OfferJoin(models.Model):
    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    offer = GenericForeignKey('content_type', 'object_id')

我希望能够同时查询外部和内部优惠,以便在一个页面上显示所有优惠。我可以使用OfferJoin.objects.all()查询所有这些内容,但我需要能够按用户进行过滤,例如OfferJoin.objects.filter(offer__user__id=request.user.id)

我做错了什么?有更好的方法吗?

感谢。

编辑:解决方案

事实证明,related_query_name中的GenericRelation不能与GenericForeignKey列的名称相同。这是更新行:

    relation = GenericRelation(OfferJoin, related_query_name='offerquery')

这可让我正确过滤,但我无法.exclude()查询。尽管如此,这是朝着正确方向迈出的一步。

1 个答案:

答案 0 :(得分:0)

倒车怎么样?

internal = InternalOffer.objects.filter(user=user)
external = ExternalOffer.objects.filter(user=user)
result = [internal, external]

在模板中执行:

{% for subresult in result %}
  {% for offer in subresult %}
    {{ offer.relation }}
  {% endfor %}
{% endfor %}