Django 在角度模板中使用外键属性

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

我使用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 = 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
,并在视图中使用它