【发布时间】:2021-03-02 09:32:01
【问题描述】:
所以我得到了这些任务:
-
创建会议室
-
获取会议室预订和按员工过滤的可能性
-
创建预订(预订有标题、起止日期、 员工)
首先我创建了一个会议室,这是模型:
class MeetingRooms(models.Model):
public_id = models.UUIDField(default=uuid.uuid4, editable=False, unique=True, blank=False, null=False, max_length=36)
creator = models.ForeignKey(Employees, on_delete=models.CASCADE)
reservations = models.ManyToManyField(MeetingRoomsReservations, blank=True)
secret_key = models.CharField(max_length=128, null=False, blank=False)
date_created = models.DateTimeField(auto_now_add=True)
class Meta:
db_table = "MeetingRooms"
def __str__(self):
return str(self.id)
所以任务说我需要创建某种预订,所以基本上我在想我可以创建reservations 对象并使其成为ManyToManyField,这样它就可以为不同的用户提供许多预订,想象一下会议可以有大概有 10 个人。
然后我创建了MeetingRoomsReservations 模型来处理所有预订:
class MeetingRoomsReservations(models.Model):
statusTypes = [
(0, "Valid"),
(1, "Cancelled")
]
receiver = models.ForeignKey(Employees, on_delete=models.CASCADE)
meeting_room = models.ForeignKey('MeetingRooms', on_delete=models.CASCADE, default=None)
title = models.CharField(max_length=150, blank=False, null=False)
status = models.IntegerField(choices=statusTypes, null=False, blank=False, default=0)
date_from = models.DateTimeField()
date_to = models.DateTimeField()
class Meta:
db_table = "MeetingRoomsReservations"
def __str__(self):
return str(self.id)
据我了解的逻辑,MeetingRoomsReservations 将处理为 MeetingRoom 注册的所有预订。
MeetingRoom > Reservations > [ List Of Reservations ] = 每个预订都有时间等。
好的,现在我必须创建 API 端点:
from main.models import MeetingRooms, MeetingRoomsReservations
from rest_framework import viewsets, generics
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated, AllowAny
from .serializers import MeetingRoomSerializer, ReservationSerializer
from django.http import JsonResponse
class MeetingRoomViewSet(viewsets.ModelViewSet):
permission_classes = [
AllowAny
]
queryset = MeetingRooms.objects.all()
serializer_class = MeetingRoomSerializer
def perform_create(self, serializer):
serializer.save()
class ReservationViewSet(viewsets.ModelViewSet):
现在剩下的就是创建一个序列化器?听起来容易吗?让我们看看..
从 rest_framework 导入序列化程序 从 main.models 导入 MeetingRooms、MeetingRoomsReservations
class ReservationSerializer(serializers.ModelSerializer):
class Meta:
model = MeetingRoomsReservations
fields = ('receiver', 'meeting_room', 'status', 'title', 'date_from', 'date_to')
class MeetingRoomSerializer(serializers.ModelSerializer):
class Meta:
model = MeetingRooms
fields = ('creator', 'public_id', 'creator', 'date_created', 'secret_key', 'reservations')
extra_kwargs = {'secret_key': {'write_only': True, 'min_length': 8}}
让我们看看我们的 Rest Framework:
所以现在是我不明白的部分。要创建会议室,仅发布这些值就足够了吗?
创建会议室后,应如何添加预订?
经过数小时的尝试,我无法正确创建预订并将其分配到特定的会议室。如何正确处理这个操作?
【问题讨论】:
-
不要在
roomsapi 中公开reservations,除非您希望它们是只读的。但是,我建议使用不同的端点/rooms/<id>/reservations,您可以在其中获得具有该 ID 的会议室的所有预订,以及任何其他 CRUD 操作。
标签: python django api django-models django-rest-framework