相关疑难解决方法(0)

如何在Django视图中组合2个或更多查询集?

我正在尝试构建我正在构建的Django站点的搜索,并且在搜索中我正在搜索3种不同的模型.为了获得搜索结果列表的分页,我想使用通用的object_list视图来显示结果.但要做到这一点,我必须将3个查询集合并为一个.

我怎样才能做到这一点?我试过这个:

result_list = []            
page_list = Page.objects.filter(
    Q(title__icontains=cleaned_search_term) | 
    Q(body__icontains=cleaned_search_term))
article_list = Article.objects.filter(
    Q(title__icontains=cleaned_search_term) | 
    Q(body__icontains=cleaned_search_term) | 
    Q(tags__icontains=cleaned_search_term))
post_list = Post.objects.filter(
    Q(title__icontains=cleaned_search_term) | 
    Q(body__icontains=cleaned_search_term) | 
    Q(tags__icontains=cleaned_search_term))

for x in page_list:
    result_list.append(x)
for x in article_list:
    result_list.append(x)
for x in post_list:
    result_list.append(x)

return object_list(
    request, 
    queryset=result_list, 
    template_object_name='result',
    paginate_by=10, 
    extra_context={
        'search_term': search_term},
    template_name="search/result_list.html")
Run Code Online (Sandbox Code Playgroud)

但这不起作用当我尝试在通用视图中使用该列表时,我收到错误.该列表缺少clone属性.

有人知道如何合并三个列表page_list,article_listpost_list

django search django-queryset django-q

613
推荐指数
13
解决办法
24万
查看次数

自定义QuerySet和Manager而不会破坏DRY?

我正试图找到一种方法来实现自定义QuerySet和自定义Manager而不会破坏DRY.这是我到目前为止:

class MyInquiryManager(models.Manager):
    def for_user(self, user):
        return self.get_query_set().filter(
                    Q(assigned_to_user=user) |
                    Q(assigned_to_group__in=user.groups.all())
                )

class Inquiry(models.Model):   
    ts = models.DateTimeField(auto_now_add=True)
    status = models.ForeignKey(InquiryStatus)
    assigned_to_user = models.ForeignKey(User, blank=True, null=True)
    assigned_to_group = models.ForeignKey(Group, blank=True, null=True)
    objects = MyInquiryManager()
Run Code Online (Sandbox Code Playgroud)

这很好,直到我做这样的事情:

inquiries = Inquiry.objects.filter(status=some_status)
my_inquiry_count = inquiries.for_user(request.user).count()
Run Code Online (Sandbox Code Playgroud)

这会立即打破一切,因为QuerySet它没有相同的方法Manager.我已经尝试创建一个自定义QuerySet类,并在其中实现它MyInquiryManager,但我最终复制了所有的方法定义.

我也发现这个片段有效,但我需要传递额外的参数,for_user因此它会因为重新定义而严重依赖get_query_set.

有没有办法在不重新定义子类QuerySetManager子类中的所有方法的情况下执行此操作?

django django-models django-queryset django-managers

49
推荐指数
5
解决办法
3万
查看次数

Tastypie从继承的模型访问字段

是否可以使用tastypie在相关模型上包含字段?

根据我的模型如下:如果我将一个VideoContent和一个TextContent实例持久保存到数据库,那么我可以从我的内容资源中获取2个对象,但是没有其他字段可用.

是否可以包含相关模型中的字段(在这个例子中,视频网址和文本内容),并且将来可以满足添加更多内容类型的需要,而无需重写内容资源,或者我是从方向错误?

目标是能够使用更多ContentTypes扩展它,而无需更改Content资源(假设它可以在第一时间使其工作)

Models.py:

class Content(models.Model):
    parent = models.ForeignKey('Content', related_name='children', null=True, blank=True)

class TextContent(Content):
    text = models.CharField(max_length=100)

class VideoContent(Content):
    url = models.CharField(max_length=1000)
Run Code Online (Sandbox Code Playgroud)

然后我的资源:

class ContentResource(ModelResource):
    children = fields.ToManyField('myapp.api.resources.ContentResource', 'children', null=True, full=True)

    class Meta:
        resource_name = 'content'
        queryset = ContentResource.objects.all()
        authorization = Authorization()
        always_return_data = True
Run Code Online (Sandbox Code Playgroud)

django tastypie

5
推荐指数
1
解决办法
947
查看次数