Skip to content

Instantly share code, notes, and snippets.

@vladimirmyshkovski
Last active April 19, 2019 22:12
Show Gist options
  • Save vladimirmyshkovski/a5e94510eb929010ed9870207e2a5e91 to your computer and use it in GitHub Desktop.
Save vladimirmyshkovski/a5e94510eb929010ed9870207e2a5e91 to your computer and use it in GitHub Desktop.
from django.db.models import ForeignKey, CASCADE, SET_NULL, ManyToManyField
from django.utils.translation import ugettext_lazy as _
from model_utils.fields import StatusField
from model_utils import Choices
from example.core.models import BaseModel, HashableModel
class Order(BaseModel, HashableModel): # type: ignore
client = ForeignKey(
"clients.Client",
on_delete=CASCADE,
related_name="orders",
verbose_name=_("Client"),
)
master = ForeignKey(
"masters.Master",
on_delete=SET_NULL,
related_name="orders",
verbose_name=_("Master"),
null=True
)
services = ManyToManyField("services.Service")
class OrderProposal(BaseModel, HashableModel): # type: ignore
STATUS = Choices(
("approved", _("Published")),
("waiting", _("Waiting")),
("canceled", _("Canceled"))
)
status = StatusField(default="approved")
order = ForeignKey(
"orders.Order",
on_delete=CASCADE,
related_name="proposals",
verbose_name=_("Order")
)
master = ForeignKey(
"masters.Master",
on_delete=CASCADE,
related_name="proposals",
verbose_name=_("Master")
)
from rest_framework.serializers import ModelSerializer
from example.core.serializers import HashableModelSerializerMixin
from example.clients.serializers import ClientSerializer
from example.masters.serializers import MasterSerializer
from example.services.serializers import ServiceSerializer
from example.orders.models import Order, OrderProposal
class OrderProposalSerializer(HashableModelSerializerMixin, ModelSerializer):
master = MasterSerializer()
class Meta:
model = OrderProposal
exclude = ("is_removed", "order")
class OrderSerializer(HashableModelSerializerMixin, ModelSerializer):
client = ClientSerializer()
master = MasterSerializer()
services = ServiceSerializer(many=True, read_only=True)
proposals = OrderProposalSerializer(many=True)
class Meta:
model = Order
exclude = ("is_removed", )
from rest_framework.viewsets import ReadOnlyModelViewSet
from example.orders.models import Order
from example.orders.serializers import OrderSerializer
class OrderViewSet(ReadOnlyModelViewSet):
queryset = Order.objects.prefetch_related("proposals").all()
serializer_class = OrderSerializer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment