我想实现一个多对多关系,这样一个人可以加入多个社交俱乐部,一个社交俱乐部可以有多个成员。这是我得到的结果,但它不显示电影详细信息,序列化给我一个错误 -
原始异常文本为:“ManyRelatedManager”对象没有属性“club_name”。
模型.py
class Club(models.Model):
club_name = models.CharField(default='',blank=False,max_length=100)
class Person(models.Model):
person_name = models.CharField(default='',blank=False,max_length=200)
clubs = models.ManyToManyField(Club)
serializers.py
class ClubSerializer(serializers.ModelSerializer):
class Meta:
model = Club
fields = ('url','id','club_name','person')
class PersonSerializer(serializers.ModelSerializer):
clubs = ClubSerializer()
class Meta:
model = Person
fields = ('url','id','person_name','clubs')
views.py
class ClubDetail(generics.ListCreateAPIView):
serializer_class = ClubSerializer
def get_queryset(self):
club = Clubs.objects.get(pk=self.kwargs.get('pk',None))
persons = Person.objects.filter(club=club)
return persons
class ClubList(generics.ListCreateAPIView):
queryset = Club.objects.all()
serializer_class = ClubSerializer
class PersonDetail(generics.RetrieveUpdateDestroyAPIView):
serializer_class = PersonSerializer
def get_object(self):
person_id = self.kwargs.get('pk',None)
return Person.objects.get(pk=person_id)
urls.py
urlpatterns = format_suffix_patterns([
url(r'^$', views.api_root),
url(r'^clubs/$',
views.ClubList.as_view(),
name='club-list'),
url(r'^clubs/(?P<pk>[0-9]+)/persons/$',
views.ClubDetail.as_view(),
name='club-detail'),
url(r'^person/(?P<pk>[0-9]+)/$',
views.PersonDetail.as_view(),
name='person-detail'),
])
在我的本地服务器上,我得到了俱乐部列表,该列表将我导航到俱乐部详细信息 View ,但它不显示电影名称,或者,但我看不到人员列表。我该如何正确执行此操作?
请您参考如下方法:
您的代码中存在许多问题。即:
- ClubSerializer.Meta.fields - person 应该是 person_set
- PersonSerializer - 俱乐部应该是
clubs = ClubSerializer(many=True) - ClubDetail.serializer_class - ClubSerializer 应该是 PersonSerializer
- ClubDetail - 查询集应该是
persons = Person.objects.filter(clubs=club)
如果您解决了上述问题,您应该能够导航到 ClubDetail 并查看俱乐部成员列表。
