【发布时间】:2022-02-18 06:26:03
【问题描述】:
我的系统中有 2 个项目必须使用。但我正在尝试开发一个系统,我必须将它们放在一个视图中并按“时间戳”对它们进行排序。
class CalendarEventSerializer(serializers.ModelSerializer):
class Meta:
model = CalendarEvent
fields = ("id","author",...)
class CalendarItemSerializer(serializers.ModelSerializer):
class Meta:
model = CalendarItem
fields = ("id","author",...)
我使用 ViewSet 来调节我的模型以对其进行分页和过滤。
class CalendarItemViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
queryset = CalendarItem.objects.all().order_by('-timestamp')
serializer_class = CalendarItemSerializer
filter_backends = [UserFilterBackend,DjangoFilterBackend]
pagination_class = StandardResultsSetPagination
filterset_fields = ['author']
class CalendarEventViewSet(viewsets.ModelViewSet):
permission_classes = (IsAuthenticated,)
queryset = CalendarEvent.objects.all().order_by('-timestamp')
serializer_class = CalendarEventSerializer
filter_backends = [UserFilterBackend,DjangoFilterBackend]
pagination_class = StandardResultsSetPagination
filterset_fields = ['author']
我如何使用这个系统将 2 个或模型合并到一个视图集或序列化器中?
注意:我知道stackoverflow中有类似问题的一些答案,但我的代码结构不同,我想得到一些观点
更新
所以这就是我想要做的: - 我正在形成一个像 facebook/instagram 这样的提要页面,并在一个视图中组合多个模型。
-我已经可以使用上面的视图集了,但我现在想合并它们。
-我想按其时间戳对每个项目进行排序,并在 JSON 中检索它们,但在一个系统中检索它们,而不是像:
calendarevents:[] calendaritems []
但喜欢:
calendarevent 1(created 2 mins ago)
calendaritem 1 (created 3 mins ago)
calendarevent 2(created 4 mins ago)
calendaritem 2(created 5 mins ago)
我很乐意提供更多信息,请尽管询问。
更新 2:
class CalendarEvent(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
author = models.ForeignKey(User, on_delete=models.CASCADE,related_name='calendarevents')
charfield1 = models.CharField(max_length=300)
integerfield1 = models.IntegerField(default='0')
charfield2 = models.CharField(max_length=200,null=True, blank=True)
charfield3= models.CharField(null=True,blank=True,max_length=64000)
class CalendarItem(models.Model):
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
author = models.ForeignKey(User, on_delete=models.CASCADE,related_name='calendaritems')
charfield1 = models.CharField(max_length=300)
integerfield1 = models.IntegerField(default='0')
charfield2 = models.CharField(max_length=200,null=True, blank=True)
charfield3= models.CharField(null=True,blank=True,max_length=64000)
【问题讨论】:
-
我从你的解释中得到的一件事是你想合并这两个 ModelViewSet。你能告诉我你想在什么基础上得到
CalendarItemViewSet的结果,然后去显示CalendarEventViewSet的结果。 -
如果你能告诉我条件基础,那么我们可以将它们自定义合并到模型视图集的辅助函数下。
-
我已经更新了问题,请查看。
-
如果是这种情况,我建议您编写自定义 APIView,因为模型视图集本质上应该用于单个模型。通过说我的意思是你可以做到,但定制模型视图集并获得结果作为两个模型的合并视图集结果并不是最佳实践。使用 APIView 集,您可以编写自定义 APIView,如果需要,您可以从 DRF 添加 Mxinins。
-
@BrianDestura 我无法分享模型的完整信息,但我给出了它们具有不同名称的公共字段。
标签: django django-rest-framework