如果资源被拉入另一个,django tastypie 资源查询集过滤器不起作用

django tastypie resource queryset filter doesn't work if resource is pulled into another

型号

class Quote(models.model):
    quote_ref = models.TextField(null=True, blank=True)
    order = models.Foreignkey('Order', related_name='quotes')
    version models.DecimalField(null=True, blank=True)
    requested_date = models.DateField(null=True, blank=True)
    expiry_date = models.DateField(null=True, blank=True)
    closed_date = models.DateField(null=True, blank=True)

class Order(models.model):
    order_ref = models.CharField(null=True, blank=True)
    cost models.DecimalField(null=True, blank=True)
    order_date = models.DateField(null=True, blank=True)
    delivery_date = models.DateField(null=True, blank=True)
    .......
    .......

资源

class RequestsResource(ModelResource):
    quotes = fields.ToManyField('api.resources.QuoteIndexResource', 'quotes', full=True, null=True)
    class Meta:
        queryset = Order.objects.all()
        resource_name = 'request'


class QuoteIndexResource(ModelResource):

    class Meta:
        queryset = Quote.objects.all().filter(closed_date__isnull=True)
        resource_name = 'index_quote'

如果我单独使用 QuoteIndexResource,则 queryset 上的过滤器会起作用,但如果它被拉入 RequestsResource,则过滤器不会对数据产生任何影响.

有没有办法让 .filter(closed_date__isnull=True) 在这种情况下工作?

Tastypie 中的 ToManyField 似乎独立于它们在元 class 中的查询集设置。

简单的解决方法是使用带有 lambda 表达式的属性:

quotes = fields.ToManyField(
    'api.resources.QuoteIndexResource',
    attribute=lambda bundle: Quote.objects.all().filter(
        order=bundle.obj, closed_date__isnull=True),
    full=True, null=True
)

文档中的更多详细信息:http://django-tastypie.readthedocs.io/en/latest/fields.html#tomanyfield

我的错我应该在解决这个问题时关闭它。 所以我发现如果我使用 attribute=lambda bundle 我会得到错误。 但只使用 lambda bundle: 一切正常。

quotes = fields.ToManyField(
    'api.resources.QuoteIndexResource', lambda bundle: Quote.objects.filter(order=bundle.obj, closed_date__isnull=True),
    full=True, null=True

)