Django 在角度模板中使用外键属性
我使用Django作为后端(Django Rest框架),使用Angular作为前端。在后端,我有两种型号:Django 在角度模板中使用外键属性,django,angular,django-rest-framework,Django,Angular,Django Rest Framework,我使用Django作为后端(Django Rest框架),使用Angular作为前端。在后端,我有两种型号: class Post(models.Model): category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True) content = models.TextField(max_length=1000) class Category(models.Model): title
class Post(models.Model):
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
content = models.TextField(max_length=1000)
class Category(models.Model):
title = models.CharField(max_length=120)
我将其相应地序列化:
class CategorySerializer(ModelSerializer):
class Meta:
model = Category
fields = '__all__'
class PostSerializer(ModelSerializer):
class Meta:
model = Post
fields = '__all__'
然后在组件模板中,我要打印特定帖子的类别标题:
<li *ngFor='let post of posts'>
<div *ngIf='post'>
<p>{{ post.category.title }}</p>
<p>{{ post.content }}</p>
</div>
</li>
为什么{{post.category.title}
不起作用,而{{post.content}
起作用?这是我的序列化问题还是我的Angular类的问题
编辑:API视图:
class PostListCreateAPIView(ListCreateAPIView):
queryset = Post.objects.all()
serializer_class = PostSerializer
创建一个新的序列化程序
retrievepostserializer
使用CategorySerializer
在retrievepostserializer
class RetrivePostSerializer(ModelSerializer):
category = CategorySerializer(read_only=True)
class Meta:
model = Post
fields = ('id', 'category', 'content')
对GET和POST使用不同的序列化程序,重写GET\u serializer\u类
方法
class PostListCreateAPIView(ListCreateAPIView):
queryset = Post.objects.all()
def get_serializer_class(self):
if self.request.method == 'POST':
return PostSerializer
return RetrivePostSerializer
您的后序列化程序将与前面的一样
class PostSerializer(ModelSerializer):
class Meta:
model = Post
fields = '__all__'
创建一个新的序列化程序retrievepostserializer
使用CategorySerializer
在retrievepostserializer
class RetrivePostSerializer(ModelSerializer):
category = CategorySerializer(read_only=True)
class Meta:
model = Post
fields = ('id', 'category', 'content')
对GET和POST使用不同的序列化程序,重写GET\u serializer\u类
方法
class PostListCreateAPIView(ListCreateAPIView):
queryset = Post.objects.all()
def get_serializer_class(self):
if self.request.method == 'POST':
return PostSerializer
return RetrivePostSerializer
您的后序列化程序将与前面的一样
class PostSerializer(ModelSerializer):
class Meta:
model = Post
fields = '__all__'
我尝试了这个方法,但在我的PostCreateAPIView(可浏览API)中,它要求我也发布一个新类别,这导致了错误:更新了我的答案,将read_only=True
添加到CategorySerializer constructorOk,这也是我的第一个操作。但这会导致为我创建的每个新帖子添加category=null。您需要使用两个不同的序列化程序,一个用于创建,另一个用于检索。更新我的答案,您需要创建一个新的序列化程序retrievepostserializer
,并在视图中使用它。我尝试了此操作,但随后在我的PostCreateAPIView(可浏览API)中使用它还要求我发布一个新的类别,这导致了错误:更新了我的答案,将read_only=True
添加到CategorySerializer constructorOk,这也是我的第一个操作。但这会导致为我创建的每个新帖子添加category=null。您需要使用两个不同的序列化程序,一个用于创建,另一个用于检索。更新我的答案,您需要创建一个新的序列化程序retrievepostserializer
,并在视图中使用它