我很新的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很多事情,但沒能找到有關我的情況的任何材料。
如果您有任何想法,請幫助我。
謝謝!當我看看它時,我只知道這是一件相當簡單的事情......但仍然感謝您的建議!現在它完美的工作! –