【发布时间】:2021-11-05 16:29:03
【问题描述】:
Django 和 DRF 的新手,我在模型属性中有一个接受参数的方法。通过具有默认参数的序列化程序类并获得 JSON 响应,我设法将其称为成功。我的问题是我无法将参数传递给名为 balance 的函数。我已经成功地将我的论点从视图传递到序列化程序类,但从序列化程序传递到我失败的模型。我认为会受到赞赏。
模型.py
class Item(models.Model):
entered_by = models.ForeignKey(User, on_delete=models.PROTECT)
name = models.CharField(max_length=50, blank=True)
@property
def balance(self, stock_type='Retail'):
stock = Stock.objects.filter(item=self, type=stock_type, status='InStock').aggregate(models.Sum('quantity')).get('quantity__sum')
return stock or 0
views.py
def getItemInfo(request):
if request.is_ajax and request.method == "GET":
id = request.GET.get("item_id", None)
sell_type = request.GET.get("sell_type", None)
item = Item.objects.get(id=id)
if item:
serializer = ItemSerializer(item, context={'sell_type':sell_type})
return JsonResponse(serializer.data, status = 200, safe=False)
else:
return JsonResponse({"data":False}, status = 400)
serializer.py
from rest_framework import serializers
from .models import Item
class ItemSerializer(serializers.ModelSerializer):
balance = serializers.SerializerMethodField()
class Meta:
model = Item
fields = ('entered_by', 'name', 'balance', 'sell_mode')
def get_balance(self, object):
sell_type = self.context.get("sell_type")
if sell_type:
return object.balance(sell_type)
return object.balance
我遇到的错误 'int' 对象不可调用
【问题讨论】:
-
你不能发送参数到
@property -
@RezaHeydari,我刚知道,谢谢你指出。 :)
标签: django django-rest-framework