相关疑难解决方法(0)

在Django Rest Framework中的响应中包含中介(通过模型)

我有一个关于处理m2m /通过模型及其在django rest框架中的表示的问题.我们来看一个经典的例子:

models.py:

from django.db import models

class Member(models.Model):
    name = models.CharField(max_length = 20)
    groups = models.ManyToManyField('Group', through = 'Membership')

class Group(models.Model):
    name = models.CharField(max_length = 20)

class Membership(models.Model):
    member = models.ForeignKey('Member')
    group = models.ForeignKey('Group')
    join_date = models.DateTimeField()
Run Code Online (Sandbox Code Playgroud)

serializers.py:

imports...

class MemberSerializer(ModelSerializer):
    class Meta:
        model = Member

class GroupSerializer(ModelSerializer):
    class Meta:
        model = Group
Run Code Online (Sandbox Code Playgroud)

views.py:

imports...

class MemberViewSet(ModelViewSet):
    queryset = Member.objects.all()
    serializer_class = MemberSerializer

class GroupViewSet(ModelViewSet):
    queryset = Group.objects.all()
    serializer_class = GroupSerializer
Run Code Online (Sandbox Code Playgroud)

在获取成员实例时,我成功接收了所有成员的字段及其组 - 但是我只获得了组的详细信息,而没有来自成员模型的额外详细信息.

换句话说,我希望收到:

{ …
Run Code Online (Sandbox Code Playgroud)

python django django-rest-framework

96
推荐指数
2
解决办法
2万
查看次数

序列化器字段可能命名不正确,并且与“GenericRelatedObjectManager”实例上的任何属性或键都不匹配

我无法弄清楚为什么我会收到此错误“序列化程序字段可能命名不正确,并且与GenericRelatedObjectManager实例上的任何属性或键都不匹配。原始异常文本是:'GenericRelatedObjectManager' 对象没有属性 'country'。”。我已经为此工作了几天,有人可以帮助我吗?我的代码有什么问题?提前致谢。

我想创建一个具有 CRUD 功能的嵌套序列化程序。计划在我的 DRF 中使用它。

我有 3 个相互关联的模型,即公司、地址和国家。

  • 公司模型有一个名为“地址”的字段,它是一个 GenericForeignKey。
  • 地址模型有一个名为“国家”的字段,它是外键。
  • Country 模型是 CountryField()。我正在使用 django_countries 插件。

模型结构

Company
 |__Address (GenericForeignKey)
    |___Country (ForeignKey)
Run Code Online (Sandbox Code Playgroud)

公司模式

from django_countries.fields import CountryField

class SalesClientCompany(models.Model):
            address = GenericRelation(
                Address,
                null=True,
                blank=True,
            )
Run Code Online (Sandbox Code Playgroud)

地址模型

class Address(models.Model):

    content_type = models.ForeignKey(ContentType, on_delete=models.CASCADE,)

    object_id = models.UUIDField(
        primary_key=False,
        unique=False,
        default=uuid.uuid4,
        blank=True,
        null=True,
    )

    content_object = GenericForeignKey()

    country = models.ForeignKey(
        Country,
        verbose_name=_("Country"),
        to_field='country',
        blank=False,
        on_delete=models.CASCADE,
    )
Run Code Online (Sandbox Code Playgroud)

国家模式

from django_countries.fields import CountryField

class Country(SmardtAbstractHistory): …
Run Code Online (Sandbox Code Playgroud)

django django-serializer django-rest-framework

4
推荐指数
2
解决办法
7010
查看次数