首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django多2许多通过rest框架

Django多2许多通过rest框架
EN

Stack Overflow用户
提问于 2021-07-09 19:34:36
回答 1查看 45关注 0票数 1

我正在做一个小项目,但我不能让序列化器工作。

我已经试过了,我不知道我做错了什么。我的模型对很多人来说都是

代码语言:javascript
复制
class User(AbstractUser):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)

    phone = models.CharField(max_length=50, unique=True)
    identity_number = models.CharField(max_length=50, unique=True)
    address = models.CharField(max_length=200)
    city = models.CharField(max_length=200)
    post_code = models.CharField(max_length=7, null=True)

    visited = models.ManyToManyField(
        Company,
        through="CompanyUser",
        through_fields=(
            "user",
            "company",
        ),
    )

    is_visitor = models.BooleanField("visitor status", default=False)
    is_company = models.BooleanField("company status", default=False)

class CompanyUser(models.Model):
    id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
    company = models.ForeignKey(
       Company, on_delete=models.CASCADE, related_name="company_visitors"
    )
    user = models.ForeignKey(
       User, on_delete=models.CASCADE, related_name="company_visited"
    )

    checked_in = models.DateTimeField(auto_now_add=False)
    checked_out = models.DateTimeField(auto_now=False)
代码语言:javascript
复制
#serializers.py

class CompanyVisitedSerializer(serializers.HyperlinkedModelSerializer):
    
    company_id = serializers.ReadOnlyField(source="company.id")
    company_address = serializers.ReadOnlyField(source="company.business_address")
    company_name = serializers.ReadOnlyField(source="company.business_name")
    company_address = serializers.ReadOnlyField(source="company.business_address")
    checked_in = serializers.ReadOnlyField(source="user.checked_in")
    checked_out = serializers.ReadOnlyField(source="user.checked_out")
    
    class Meta:
        model = CompanyUser
        fields = (
            "checked_in",
            "checked_out",
            "company_name",
            "company_address",
            "company_id",
        )
    
    
class VisitorSerializer(serializers.ModelSerializer):
    
    # visited = CompanySerializer(many=True)
    visited = CompanyVisitedSerializer(
        many=True,
    )

但是我得到了空的{}:

代码语言:javascript
复制
    {
  "address": "192 millie road",
  "city": "singapore",
  "phone": "2066980",
  ...
  "visited": [
    {}, //i want to populate this with { company: name_of_company, checkin, checkout}
    {}
  ]
}

我读过这些书:

  1. https://bitbucket.org/snippets/adautoserpa/MeLa/django-rest-framework-manytomany-through
  2. Django: Serialize a model with a many-to-many relationship with a through argument
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-09 19:48:12

visited所指向的模型是Company,而不是CompanyUser。如果您想使用CompanyUser,关系是company_visited,因此:

代码语言:javascript
复制
class VisitorSerializer(serializers.ModelSerializer):
    visited = CompanyVisitedSerializer(
        source='company_visited',
        many=True
    )
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68321945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档