Django और DRF के लिए नया, मेरे पास मॉडल गुणों में एक विधि है जो तर्क स्वीकार करती है। मैं इसे सफल कहने में कामयाब रहा हूं, हालांकि डिफ़ॉल्ट पैरामेंटर्स के साथ एक धारावाहिक वर्ग और JSON प्रतिक्रिया प्राप्त कर रहा है। मेरी समस्या यह है कि मैं बैलेंस नामक उस फ़ंक्शन पर तर्क पारित नहीं कर सकता। मैंने अपने तर्क को धारावाहिक वर्ग से देखने में सफल रहा है लेकिन धारावाहिक से मॉडल तक जहां मैं असफल रहा हूं। मुझे लगा कि सराहना की जाएगी।
Model.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
View.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' ऑब्जेक्ट कॉल करने योग्य नहीं है
1 उत्तर
@property को कॉल नहीं किया जा सका। इसलिए मैंने आइटम मॉडल में सदस्य चर और सेटर (गणना के साथ) विधियों को बनाया है, फिर सुनिश्चित करें कि सेटर विधि को get_balance
सीरिएलाइज़र विधि में बुलाया जाएगा, शेष राशि वापस करने से पहले।
Django ORM मॉडल ही सिर्फ एक वर्ग है; आप कुछ भी कर सकते हैं, न केवल ओआरएम से जुड़ना।
मेरा कोड:
Model.py
from django.db import models
from django.contrib.auth.models import User
class Item(models.Model):
entered_by = models.ForeignKey(User, on_delete=models.PROTECT)
name = models.CharField(max_length=50, blank=True)
_balance = 0
def calculate_balance(self, stock_type='Retail'):
stock = Stock.objects.filter(item=self, type=stock_type, status='InStock').aggregate(
models.Sum('quantity')).get('quantity__sum')
self._balance = stock or 0
@property
def balance(self):
return self._balance
Serializer.py
from django.contrib.auth.models import User
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')
def get_balance(self, object):
sell_type = self.context.get("sell_type")
if sell_type:
object.calculate_balance(sell_type)
return object.balance
View.py
from .models import Item
from .serializer import ItemSerializer
from django.http.response import JsonResponse
def getItemInfo(request):
if request.is_ajax and request.method == "GET":
id = request.GET.get("item_id", None)
if id is None:
return JsonResponse({"data": False}, status=400)
sell_type = request.GET.get("sell_type", None)
try:
item = Item.objects.get(id=id)
serializer = ItemSerializer(item, context={'sell_type': sell_type})
return JsonResponse(serializer.data, status=200, safe=False)
except Item.DoesNotExist:
return JsonResponse({"data": False}, status=400)
संबंधित सवाल
नए सवाल
django
Django एक ओपन-सोर्स सर्वर-साइड वेब एप्लीकेशन फ्रेमवर्क है जिसे पायथन में लिखा गया है। यह कम कोड, विशेष-अतिरेक पर विशेष ध्यान देने और निहित से अधिक स्पष्ट होने के साथ जटिल डेटा-संचालित वेबसाइटों और वेब एप्लिकेशन बनाने के लिए आवश्यक प्रयास को कम करने के लिए डिज़ाइन किया गया है।
@property
को args नहीं भेज सकते