我想要实现一种多对多
关系,以便一个人可以加入多个社交俱乐部,并且一个社交俱乐部可以拥有多个成员。这就是我已经走了多远,但这不显示电影详细信息,并且序列化给我一个错误 -
原始异常文本为:“ManyRelatedManager”对象没有属性“club_name”。
models.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)
序列化器.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
并查看俱乐部成员列表。
关于python - Django Rest Framework 实现多对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34441899/