首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >嵌套序列化现在不创建forignkey,它需要一个新对象,而不是'id‘

嵌套序列化现在不创建forignkey,它需要一个新对象,而不是'id‘
EN

Stack Overflow用户
提问于 2018-07-24 19:57:46
回答 1查看 78关注 0票数 0

这是我的模型,序列化程序和输出,但当我想创建一个新页面时,它会要求我添加一个完整的新用户,因为它只是一个外键,它需要是一个类似于1(用户id)的数字,在类别的情况下也是如此,我该如何解决它……请帮帮我

serializers.py

代码语言:javascript
复制
class TeamMembersSerializer(serializers.ModelSerializer):
    class Meta:
        model = TeamMembers
        fields = [
            'user',
            'page',
        ]
        depth = 1

class SocialAccountsSerializer(serializers.ModelSerializer):
    social = SocialCatSerializer()
    class Meta:
        model = SocialAccounts
        fields = [
            'page',
            'social',
            'link'
        ]
        depth = 1

class PageImageSerializer(serializers.ModelSerializer):
    class Meta:
        model = PageImages
        fields = [
            'page',
            'image',
        ]
        depth = 1

class PageSerializer(serializers.ModelSerializer):
    owner = UserSerializer()
    catagory = BusinessCatSerializers()
    business_type = BusinessTypeSerializer()
    TeamMembers = TeamMembersSerializer(read_only=True)
    social_accounts = SocialAccountsSerializer(read_only=True)
    images = PageImageSerializer(read_only=True)
    class Meta:
        model =Page
        fields = [
            'id',
            'owner',
            'catagory',
            'name',
            'username',
            'images',
            'start_date',
            'business_type',
            'contect_number',
            'email_address',
            'website',
            'TeamMembers',
            'social_accounts',
            'about',
            'impression',
            'Awards',
            'Product',
            'privacy_policy',
            'is_active',
        ]

Models.py

代码语言:javascript
复制
class Page(models.Model):
    owner = models.ForeignKey(User, on_delete=models.CASCADE)
    catagory = models.ForeignKey(BusinessCatagories, on_delete=models.CASCADE, null=True, blank=True, default=None)
    name = models.CharField(max_length=254, unique=True ,default=None, blank=True)
    username = models.CharField(max_length=254, unique=True, blank=True)
    start_date = models.DateTimeField(auto_now_add=True)
    business_type = models.ForeignKey(BusinessType, on_delete=models.CASCADE, null=True, blank=True, default=None)
    contect_number = models.CharField(max_length=254, default=None, blank=True)
    email_address = models.EmailField(default=None, blank=True)
    website = models.URLField(default=None, blank=True)
    about = models.TextField(default=None, blank=True)
    impression = models.TextField(default=None, blank=True)
    Awards = models.CharField(max_length=254, default=None, blank=True)
    Product = models.CharField(max_length=254, default=None, blank=True)
    privacy_policy = models.URLField(default=None, blank=True)
    is_active = models.BooleanField(default=True)

    def __str__(self):
        return self.name

class TeamMembers(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, default=None, blank=True)
    page =  models.ForeignKey(Page, on_delete=models.CASCADE, default=None, blank=True)

    def __str__(self):
        return self.user.name

class SocialAccounts(models.Model):
    page = models.ForeignKey(Page, on_delete=models.CASCADE, default=None, blank=True)
    social = models.ForeignKey(SocialCats, on_delete=models.CASCADE, default=None, blank=True)
    link = models.URLField(default=None, blank=True)

    def __str__(self):
        return self.link

class PageImages(models.Model):
    page = models.ForeignKey(Page, on_delete=models.CASCADE, default=None, blank=True)
    image = models.ImageField(default=None, blank=True, upload_to=settings.MEDIA_ROOT)

    def __str__(self):
        return self.page.name

输出是这,但我需要在它的图像字段TeamMember字段,但它没有出现,加上它想让我添加一个新的用户,而不是要求外键"id“

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-18 02:13:44

你想要的是使用主键相关的字段。它帮助您使用关系的主键来表示关系的目标。

它应该看起来有点像这样。

注意:任何名字都要注意打字错误

代码语言:javascript
复制
class PageSerializer(serializers.ModelSerializer):
    owner = serializers.PrimaryKeyRelatedField(queryset = User.objects.all())
    catagory = serializers.PrimaryKeyRelatedField(queryset = BuisnessCat.objects.all())
    business_type = BusinessTypeSerializer()
    TeamMembers = TeamMembersSerializer(read_only=True)
    social_accounts = SocialAccountsSerializer(read_only=True)
    images = PageImageSerializer(read_only=True)

您可以阅读有关PrimaryKeyRelatedField here的更多信息。

现在,每当创建任何页面时,您需要提供的只是所有者和类别的主键。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51498016

复制
相关文章

相似问题

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