我很新的Django Django的和REST框架。我如何能实现使用中间模型嵌套的代表性?
我在我的项目中喜欢做的是使用ListAPIView
显示中间模型的信息,并且还包括关于以嵌套表示形式连接到具有外键关系的中间模型的另一个模型的详细信息。
我在我的项目中有3个型号,User
,Content
,Bookmark
。
我的模型是这样的下面。
class MyUser(AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
username = models.CharField(max_length=50)
joined_date = models.DateTimeField(auto_now_add=True)
is_staff = models.BooleanField(default=False)
is_superuser = models.BooleanField(default=False)
facebook_id = models.CharField(max_length=50, blank=True)
is_facebook = models.BooleanField(default=False)
is_active = models.BooleanField(default=False)
class Content(models.Model):
seq = models.CharField(max_length=20, unique=True)
title = models.CharField(max_length=100, null=True)
start_date = models.DateField(null=True)
end_date = models.DateField(null=True)
place = models.TextField(null=True)
realm_name = models.TextField(null=True)
area = models.TextField(null=True)
price = models.TextField(null=True)
content = models.TextField(null=True)
ticket_url = models.TextField(null=True)
phone = models.TextField(null=True)
thumbnail = models.TextField(null=True)
bookmarks = models.ManyToManyField(User, through='Bookmark')
最后一个模型,中间模型连接MyUser
和Content
。
class Bookmark(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
content = models.ForeignKey(Content, on_delete=models.CASCADE)
created_date = models.DateTimeField(auto_now_add=True)
description = models.CharField(max_length=200, null=True)
class Meta:
unique_together = (('user', 'content'),)
ordering = ['-created_date']
def __str__(self):
return '{} bookmarked by user {}'.format(self.content, self.user)
我想用BookmarkListAPIView
显示特定用户的书签信息和用户添加诸如title
,price
和start_date
的内容有一些详细信息。
下面是我的串行和ListAPIView
。
class BookmarkListView(generics.ListAPIView):
queryset = Bookmark.objects.all()
serializer_class = BookmarkSerializer
pagination_class = DefaultResultsSetPagination
def get_queryset(self):
user = self.request.user
return user.bookmark_set.all().order_by('-created_date')
class BookmarkedContentSerializer(serializers.ModelSerializer):
class Meta:
model = Content
fields = ('title', 'start_date', 'price')
class BookmarkSerializer(serializers.ModelSerializer):
content = BookmarkedContentSerializer(many=True, read_only=True)
#bookmark = BookmarkedContentSerializer(many=True, read_only=True)
class Meta:
model = Bookmark
fields = ('content', 'user')
目前,API给我的结果就像下面一样。
{ “计数”:6, “下一个”:空, “先前”:空, “结果”:[ { “内容”:8, “用户”:4 }, { “内容”:6, “用户”:4 }, { “内容”:1, “用户”:4 }, { “内容”:2, “用户“:4 }, { “内容”:3, “用户”:4 }, { “内容”:10, “用户”:4 } ] }
如所提到的上面,我想使用内容ID获取有关每个书签实例的更多详细信息。
它看起来像
{
"count": 6,
"next": null,
"previous": null,
"results": [
{ "content_id": 4
"title": A,
"price": 10$,
"user": 4
},
{
"content_id": 6,
"title": B,
"price": 13$,
"user": 4
},
{
"content_id": 1,
"title": C,
"price": 4$,
"user": 4
},
]
}
我试着写在DRF DOC很多事情,但没能找到有关我的情况的任何材料。
如果您有任何想法,请帮助我。
谢谢!当我看看它时,我只知道这是一件相当简单的事情......但仍然感谢您的建议!现在它完美的工作! –