Я создаю приложение django api, у меня есть три основных приложения (Post, Anomaly, Event), пользователь может создать аномалию или событие (ведь это вложенные модели сообщений).
All iВ настоящее время программа использует generic views
и mixins
, поэтому я могу составить список обновлений и удалить каждую модель для себя, но теперь я хочу одним запросом создать аномалию или событие (не создавая сообщение, а создавая событие).
Пост-модели
class Post(models.Model):
post_owner = models.ForeignKey(MyUser, on_delete=models.CASCADE)
description = models.TextField(max_length=255)
city = models.ForeignKey(City, related_name='location', on_delete=models.CASCADE)
longitude = models.CharField(max_length=255)
latitude = models.CharField(max_length=255)
created_at = models.DateTimeField(auto_now_add=True)
Пост-сериализаторы
class PostSerializer(serializers.ModelSerializer):
comments = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
reactions = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = Post
fields = '__all__'
Post ApiViews
class PostAPIView(mixins.CreateModelMixin, generics.ListAPIView):
lookup_field = 'pk'
serializer_class = PostSerializer
def get_queryset(self):
qs = Post.objects.all()
return qs
def perform_create(self, serializer):
serializer.save(post_owner=self.request.user)
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
def get_serializer_context(self, *args, **kwargs):
return {"request": self.request}
class PostRudView(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'pk'
queryset = Post.objects.all()
serializer_class = PostSerializer
Модель событий
class Event(models.Model):
post = models.ForeignKey(Post, related_name='event', on_delete=models.CASCADE)
approved_by = models.ForeignKey(MyUser, related_name='approvedBy', on_delete=models.CASCADE, null=True)
approved_at = models.DateTimeField(null=True)
max_participants = models.IntegerField()
starts_at = models.DateTimeField()
Сериализаторы событий
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
Событие ApiViews
class EventAPIView(mixins.CreateModelMixin, generics.ListAPIView):
lookup_field = 'pk'
serializer_class = EventSerializer
def get_queryset(self):
qs = Event.objects.all()
return qs
def perform_create(self, serializer):
serializer.save()
def post(self, request, *args, **kwargs):
return self.create(request, *args, **kwargs)
def get_serializer_context(self, *args, **kwargs):
return {"request": self.request}
class EventRudView(generics.RetrieveUpdateDestroyAPIView):
lookup_field = 'pk'
queryset = Event.objects.all()
serializer_class = EventSerializer