Python Django API:显示字段时出现问题

Python Django API:显示字段时出现问题,python,django,Python,Django,我是Django的初学者。现在,我正在使用API。我面临一个问题。我无法查看位于的名为label的字段之一。以下是截图: 这是我的serializers.py的代码,位于gamreview文件夹中 from rest_framework import serializers from .models import Game, Tags class TagSerializer(serializers.ModelSerializer): class Meta: model

我是Django的初学者。现在,我正在使用API。我面临一个问题。我无法查看位于的名为
label
的字段之一。以下是截图: 这是我的
serializers.py的代码,位于gamreview文件夹中

from rest_framework import serializers
from .models import Game, Tags


class TagSerializer(serializers.ModelSerializer):
    class Meta:
        model = Tags
        fields = ['label']

class GameSerializer(serializers.ModelSerializer):
    # label_tag = TagSerializer(many=True)
    class Meta:
        model = Game
        fields = ['id', 'title', 'developer', 'platform']
        fields = ['id', 'title', 'developer', 'platform','label_tag']

def create(self, validated_data):
    label_tag_data = validated_data.pop('label_tag')
    game = Game.objects.create(**validated_data)
    for tags_data in label_tag_data:
        Tags.objects.create(game=game, **tags_data)
    return Game.objects.create(**validated_data)

def update(self, instance, validated_data):
    instance.title = validated_data.get('title', instance.title)
    instance.developer = validated_data.get('developer', instance.developer)
    instance.platform = validated_data.get('platform', instance.platform)
    instance.tag = TagSerializer(read_only=True, many=True)
    instance.save()
    return instance
以下是我在gamreview文件夹下的
models.py
代码:

from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.

class Tags(models.Model):
    label = models.CharField(max_length=20)

    def __str__(self):
        return self.label


class Game(models.Model):
    title = models.CharField(max_length=100)
    developer = models.CharField(max_length=100)
    platform = models.CharField(max_length=50, default='null')
    label_tag = models.ManyToManyField(Tags)
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)


class Review(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)
    review = models.CharField(max_length=1000)
    date = models.DateField(auto_now=True)
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.game
from django.views import generic
from .models import Game
from rest_framework import generics
from .serializers import GameSerializer


# Create your views here.


class GameListView(generic.ListView):
    template_name = 'gamereview/gamelist.html'
    context_object_name = 'all_games'

    def get_queryset(self):
        return Game.objects.all()


class ReviewView(generic.DetailView):
    model = Game
    template_name = 'gamereview/review.html'

# class GameApiView(generics.ListAPIView):
class GameApiView(generics.ListCreateAPIView):
    queryset = Game.objects.all()
    serializer_class = GameSerializer

class GameDetailApiView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Game.objects.all()
    serializer_class = GameSerializer
以下是我在gamreview文件夹下的
views.py
代码:

from django.db import models
from django.template.defaultfilters import slugify

# Create your models here.

class Tags(models.Model):
    label = models.CharField(max_length=20)

    def __str__(self):
        return self.label


class Game(models.Model):
    title = models.CharField(max_length=100)
    developer = models.CharField(max_length=100)
    platform = models.CharField(max_length=50, default='null')
    label_tag = models.ManyToManyField(Tags)
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.title

    def save(self, *args, **kwargs):
        self.slug = slugify(self.title)
        super().save(*args, **kwargs)


class Review(models.Model):
    game = models.ForeignKey(Game, on_delete=models.CASCADE)
    review = models.CharField(max_length=1000)
    date = models.DateField(auto_now=True)
    slug = models.SlugField(max_length=150, default='null')

    def __str__(self):
        return self.game
from django.views import generic
from .models import Game
from rest_framework import generics
from .serializers import GameSerializer


# Create your views here.


class GameListView(generic.ListView):
    template_name = 'gamereview/gamelist.html'
    context_object_name = 'all_games'

    def get_queryset(self):
        return Game.objects.all()


class ReviewView(generic.DetailView):
    model = Game
    template_name = 'gamereview/review.html'

# class GameApiView(generics.ListAPIView):
class GameApiView(generics.ListCreateAPIView):
    queryset = Game.objects.all()
    serializer_class = GameSerializer

class GameDetailApiView(generics.RetrieveUpdateDestroyAPIView):
    queryset = Game.objects.all()
    serializer_class = GameSerializer
以下是我在gamreview文件夹下的
urls.py
代码:

from . import views
from django.urls import path

app_name = 'gamereview'

urlpatterns = [
    path('gamereview/', views.GameListView.as_view(), name='gamelist'),
    path('gamereview/<slug:slug>/', views.ReviewView.as_view(), name='review'),
    path('gameapi/', views.GameApiView.as_view(), name='gamelistapi'),
    path('gameapi/<int:pk>/', views.GameDetailApiView.as_view()),


]
来自。导入视图
从django.url导入路径
应用程序名称='gamereview'
URL模式=[
路径('gamereview/',views.GameListView.as_view(),name='gamelist'),
路径('gamereview/',views.ReviewView.as_view(),name='review'),
路径('gameapi/',views.gameapieview.as_view(),name='gamelistapi'),
路径('gameapi/',views.gamedetailapiew.as_view()),
]
我在运行服务器时没有收到任何错误。但是,
标签
字段未显示。
如何解决此问题?

您已经在
GameSerializer
-
Meta
类中声明了两次
字段。删除第一个

class GameSerializer(serializers.ModelSerializer):
    # label_tag = TagSerializer(many=True)
    class Meta:
        model = Game
        fields = ['id', 'title', 'developer', 'platform'] --> delete this
        fields = ['id', 'title', 'developer', 'platform','label_tag']

Django rest框架依赖于解析外键字段的
related\u name
属性。 我想只要改变你的游戏模式就行了

  label_tag = models.ManyToManyField(Tags, related_name="label")

它解决了这个问题。然而,我面临着另一个问题。我看到的不是
“标签”:“赛车”
,而是
“标签”:[1]
。这意味着,我没有得到字符串值。我应该发布一个关于该问题的新问题吗?我已经发布了一个关于特定问题的新问题。请你看一下好吗?