我有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()
查询。尽管如此,这是朝着正确方向迈出的一步。
答案 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 %}