Django Rest Framework return 一个模型在另一个模型的详细视图中
Django Rest Framework return one model inside another model's detail view
正在尝试建立一个论坛克隆。有一个板列表。每个板都包含一个线程列表。每个线程都包含一个帖子列表。我对一些事情感到困惑。
- 返回线程列表的
BoardDetail
视图是正确的方法吗?
- 我不确定如何实现。
这是我的尝试。
views.py
class BoardDetail(generics.ListAPIView):
# what needs to be done here to return the threads belonging to a particular board?
queryset = Thread.objects.filter()
serializer_class = ThreadSerializer
models.py
class Board(models.Model):
name = models.CharField(max_length=25, primary_key=True)
created = models.DateTimeField(auto_now_add=True)
board_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='board_admin')
board_moderator = models.ManyToManyField(User, related_name='board_moderator')
class Meta:
ordering = ['created']
class Thread(models.Model):
title = models.CharField(max_length=250)
created = models.DateTimeField(auto_now_add=True)
thread_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='thread')
board_id = models.ForeignKey(Board, on_delete=models.CASCADE, related_name="thread")
class Meta:
ordering = ['created']
您可以使用嵌套序列化程序来完成此操作,这是一个如何执行这些嵌套序列化程序的简单示例。
在Board模型,parent模型中,添加此功能,通过外键或id获取与某个对象相关的所有线程。
@property
def threads(self):
return self.thread_set.all() # thread is the name of the child class
然后在你的串行器 class 中,父级 class 添加一个字段以包含具有父级 ID 的线程,它必须与我们的 属性 具有相同的名称刚刚在Board模型父模型中创建,并分配了Threads模型序列化器的序列化器子模型
threads = ThreadsSerializer(many=True, required=False)
然后,您必须在 Board 序列化器、父模型的字段中添加线程
fields = ('name','created','board_admin','board_moderator','threads')
这应该允许您显示与板相关的所有线程。
正在尝试建立一个论坛克隆。有一个板列表。每个板都包含一个线程列表。每个线程都包含一个帖子列表。我对一些事情感到困惑。
- 返回线程列表的
BoardDetail
视图是正确的方法吗? - 我不确定如何实现。
这是我的尝试。
views.py
class BoardDetail(generics.ListAPIView):
# what needs to be done here to return the threads belonging to a particular board?
queryset = Thread.objects.filter()
serializer_class = ThreadSerializer
models.py
class Board(models.Model):
name = models.CharField(max_length=25, primary_key=True)
created = models.DateTimeField(auto_now_add=True)
board_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='board_admin')
board_moderator = models.ManyToManyField(User, related_name='board_moderator')
class Meta:
ordering = ['created']
class Thread(models.Model):
title = models.CharField(max_length=250)
created = models.DateTimeField(auto_now_add=True)
thread_admin = models.ForeignKey('auth.User', on_delete=models.CASCADE, related_name='thread')
board_id = models.ForeignKey(Board, on_delete=models.CASCADE, related_name="thread")
class Meta:
ordering = ['created']
您可以使用嵌套序列化程序来完成此操作,这是一个如何执行这些嵌套序列化程序的简单示例。
在Board模型,parent模型中,添加此功能,通过外键或id获取与某个对象相关的所有线程。
@property
def threads(self):
return self.thread_set.all() # thread is the name of the child class
然后在你的串行器 class 中,父级 class 添加一个字段以包含具有父级 ID 的线程,它必须与我们的 属性 具有相同的名称刚刚在Board模型父模型中创建,并分配了Threads模型序列化器的序列化器子模型
threads = ThreadsSerializer(many=True, required=False)
然后,您必须在 Board 序列化器、父模型的字段中添加线程
fields = ('name','created','board_admin','board_moderator','threads')
这应该允许您显示与板相关的所有线程。