Django 过滤通用关系

Gra*_*ntU 5 django

我在下面有一个模型,它指向一个通用的关系。这可以是联系人对象或客户对象。

class Unsubscribe(models.Model):
    """
    Notes:
    See: http://www.screamingatmyscreen.com/2012/6/django-and-generic-relations/
    """
    content_type = models.ForeignKey(ContentType, help_text="Represents the name of the model")
    object_id = models.PositiveIntegerField(help_text="stores the object id")
    content_object = generic.GenericForeignKey('content_type', 'object_id')

    reason = models.CharField(max_length=60)

    request_made = models.DateTimeField(auto_now_add=True,
                                   help_text="Shows when object was created.")


    class Meta:
        ordering = ['-request_made']
Run Code Online (Sandbox Code Playgroud)

我想列出所有取消订阅的客户和仅针对用户的联系人。

 queryset = Unsubscribe.objects.filter()
Run Code Online (Sandbox Code Playgroud)

以上为我提供了所有取消订阅的客户和任何用户的联系人,通常我会通过这样做来解决这个问题....

queryset = Unsubscribe.objects.filter(user=request.user)
Run Code Online (Sandbox Code Playgroud)

但是,取消订阅对象没有用户,但客户和联系人都有。

那么如何过滤通用关系呢?

Roh*_*han 5

你可以试试这个

Unsubscribe.objects.filter(content_type__name='user', user=request.user)
Run Code Online (Sandbox Code Playgroud)

对于content_type__name='user'指定的用户模型类或任何你与它相关的名称。

或者这也

Unsubscribe.objects.filter(content_type__name='user', object_id=request.user.id)
Run Code Online (Sandbox Code Playgroud)