Код: Выделить всё
class BedNightReturn(models.Model):
room_type = models.CharField(max_length=50)
number_of_rooms = models.PositiveSmallIntegerField()
price_per_night = models.DecimalField(max_digits=10, decimal_places=2)
days_in_month = models.PositiveSmallIntegerField()
class Meta:
verbose_name = 'BedNightReturn'
verbose_name_plural = 'BedNightReturns'
def __str__(self):
return f'{self.room_type}'
class BedNightReturnAssessment(models.Model):
assessment = models.ForeignKey(BedNightReturn, related_name = "assessments", on_delete=models.CASCADE)
class Meta:
verbose_name = 'BedNightReturnAssessment'
verbose_name_plural = 'BedNightReturnAssessments'
def __str__(self):
return f'{self.assessment.room_type}'
@property
def potential_turnover(self) -> float:
days_in_month = 30
return float(days_in_month) * float(self.assessment.number_of_rooms) * float(self.assessment.price_per_night)
@property
def actual_turnover(self) -> float:
return float(self.assessment.days_in_month) * float(self.assessment.number_of_rooms) * float(self.assessment.price_per_night)
Код: Выделить всё
class BedNightReturnSerializer(ModelSerializer):
class Meta:
model = BedNightReturn
fields = (
'id',
'room_type',
'number_of_rooms',
'price_per_night',
'days_in_month',
)
class BedNightReturnAssessmentSerializer(ModelSerializer):
assessment = BedNightReturnSerializer()
potential_turnover = ReadOnlyField()
actual_turnover = ReadOnlyField()
class Meta:
model = BedNightReturnAssessment
fields = (
'id',
'assessment',
'potential_turnover',
'actual_turnover',
)
Код: Выделить всё
class BedNightReturnViewSet(ModelViewSet):
queryset = BedNightReturn.objects.all()
serializer_class = BedNightReturnSerializer
class BedNightReturnAssessmentViewSet(ModelViewSet):
queryset = BedNightReturnAssessment.objects.all()
serializer_class = BedNightReturnAssessmentSerializer
Код: Выделить всё
from django.urls import include, path
from rest_framework import routers
from bednightlevy.views import (
BedNightReturnAssessmentViewSet,
BedNightReturnViewSet,
)
router = routers.DefaultRouter(trailing_slash = False)
router.register('returns', BedNightReturnViewSet, basename="bednight")
router.register('assessments', BedNightReturnAssessmentViewSet, basename='bednight_assessment')
urlpatterns = [
path('',include(router.urls)),
]
Идея состоит в том, чтобы использовать конечную точку /returns для публикации данных и конечную точку /assessments для получения данных (только для чтения).
п>
Подробнее здесь: https://stackoverflow.com/questions/758 ... ame-app-us