python - Django Rest Framework 实现多对多关系

标签 python django rest django-rest-framework django-serializer

我想要实现一种多对多关系,以便一个人可以加入多个社交俱乐部,并且一个社交俱乐部可以拥有多个成员。这就是我已经走了多远,但这不显示电影详细信息,并且序列化给我一个错误 -
原始异常文本为:“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/

相关文章:

python - MSSQL django_pyodbc 连接问题

django - 如何在 django admin 中获取对象的历史记录?

javascript - 带有 REST API 的 Ajax 请求 header

java - 如何从应用程序引擎获取自然的 json 表示法?

javascript - 使用服务 AngularJS 在两个 Controller 之间共享动态数据

python - 使用 Python 和 Beautiful Soup 进行多页网页抓取

python - 找不到 Bazel 构建包

python - 使用Elasticsearch DSL索引数据时出错

python - html 解析器 python

python - 使用动态鼠标悬停事件抓取网站