【发布时间】:2021-10-24 21:56:25
【问题描述】:
试图在 django 中获得 manytomany 关系,但出现以下错误 -
尝试在序列化器 GenreSerializer 上获取字段
name的值时出现 AttributeError。 序列化器字段可能命名不正确,并且与 Movie 实例上的任何属性或键都不匹配。 原始异常文本是:“电影”对象没有属性“名称”。
这里有一个类似的答案推荐设置many=True,但它不起作用 -
Attribute error when attempting to get a value for field
models.py
class Genre(models.Model):
name = models.CharField(max_length=255,unique=True)
def __unicode__(self):
return self.name
class Movie(models.Model):
mname = models.CharField(max_length=255)
genres = models.ManyToManyField(Genre,related_name='movies')
def __unicode__(self):
return self.mname
序列化器.py
class GenreSerializer(serializers.ModelSerializer):
class Meta:
model = Genre
fields = ('name','id')
class MovieSerializer(serializers.ModelSerializer):
genres = GenreSerializer(many=True, read_only=True)
class Meta:
model = Movie
fields = ('id','genres','mname')
urls.py
urlpatterns = [
url(r'^genres/$', views.GenreList.as_view()),
url(r'^genres/(?P<pk>[0-9]+)$', views.GenreDetail.as_view()),
]
urlpatterns = format_suffix_patterns(urlpatterns)
views.py
class GenreList(generics.ListCreateAPIView):
queryset = Genre.objects.all()
serializer_class = GenreSerializer
class GenreDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = GenreSerializer
def get_queryset(self):
genres = Genre.objects.get(pk=self.kwargs.get('pk', None))
movies = Movie.objects.filter(genres=genres)
return movies
【问题讨论】:
-
您是否将模型包含在 serializer.py 中? IE。
from app.models import Movie, Genre -
是的,我已经完成了导入。
-
你能用你如何称呼他们来更新你的问题吗?还是编译时出现此错误?谢谢。
-
@arcee123 完成。它符合这些错误。只有当我尝试访问
/genres/pk时才会收到错误 -
试试 CptLemming 所说的……如果不尝试放弃你的“related_name”属性。可能会扼杀你的逆向关系。
标签: python django django-rest-framework django-serializer