我正在重寫應用的後端以使用Django,並且希望儘可能保持前端儘可能不變。我需要與項目之間發送的JSON保持一致。爲Django模型發出特定JSON的清潔器/可重用的方式
在models.py
我:
class Resource(models.Model):
# Name chosen for consistency with old app
_id = models.AutoField(primary_key=True)
name = models.CharField(max_length=255)
@property
def bookingPercentage(self):
from bookings.models import Booking
return Booking.objects.filter(resource=self)
.aggregate(models.Sum("percent"))["percent__sum"]
而且在views.py
那得到的JSON所有的資源數據:
def get_resources(request):
resources = []
for resource in Resource.objects.all():
resources.append({
"_id": resource._id,
"name": resource.first,
"bookingPercentage": resource.bookingPercentage
})
return HttpResponse(json.dumps(resources))
這個工程完全按照我需要它,但它似乎有點對立的Django和/或Python。使用.all().values
將不起作用,因爲bookinPercentage
是派生屬性。
另一個問題是,還有其他類似的模型需要以幾乎相同的方式使用JSON表示。我將重寫類似的代碼,併爲模型的值使用不同的名稱。一般來說,有更好的方法來做到這一點,pythonic/djangothonic /不需要手動創建JSON?
在'fields'中包含'_id'和'bookingPercentage'不包含在JSON中,它們仍然包含在一個對象屬性'fields'中,但我需要它們在頂層。 –
爲什麼downvote,只是因爲我的建議不符合你的喜好? – professorDante
這並不是我喜歡的,但它實際上並不適用於我描述的原因。看起來'fields'只能用來限制*條目 –