如果资源被拉入另一个,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
)
型号
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
)