模型
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)
在这种情况下工作?
答案 0 :(得分:1)
似乎Tastypie中的ToManyField
独立于元类中的查询集设置。
简单的解决方法是使用带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
答案 1 :(得分:1)
我的错,我应该在修复它时关闭这个问题。
所以我发现如果我使用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
)