Python DRF oneToOneField创建序列化程序

Python DRF oneToOneField创建序列化程序,python,django,serialization,django-rest-framework,Python,Django,Serialization,Django Rest Framework,尝试使用drf/create serizlizer创建嵌套模型 我试图序列化的是“TradePost”模型,其中包含post和ProductItem 我已经使用了“ProductItemSerializer”和“PostSerializer”。。如何序列化它们??创造?不是通过告诉现有记录pk值 models.py class ProductItem(models.Model): baseProduct = models.ForeignKey(Product, related_name=

尝试使用drf/create serizlizer创建嵌套模型

我试图序列化的是“TradePost”模型,其中包含post和ProductItem

我已经使用了“ProductItemSerializer”和“PostSerializer”。。如何序列化它们??创造?不是通过告诉现有记录pk值

models.py

class ProductItem(models.Model):
    baseProduct = models.ForeignKey(Product, related_name='baseProduct')

    seller = models.ForeignKey(User)

    price = models.DecimalField(max_digits=6, decimal_places=2)

    isOrderClosed = models.BooleanField()
    isTradeCompleted = models.BooleanField()


    def __str__(self):
        return '[seller = '+self.seller.username+']' + '[product = '+(str)(self.baseProduct)+']' + '[id = '+(str)(self.id)+']'




class TradePost(models.Model):

    basePost = models.OneToOneField(Post)

    baseProductItem = models.OneToOneField(ProductItem)

    def __str__(self):
        return '[post = ' + (str)(self.basePost) + ']' + '[product = ' + (str)(self.baseProductItem) + ']' + '[id = ' + (str)(self.id) + ']'
在serialziers.py中

class ProductItemCreateSerializer(serializers.ModelSerializer):
    class Meta:
        model = ProductItem
        fields = ('baseProduct', 'price')



#???
class TradePostCreateSerializer(serializers.ModelSerializer):

    class Meta:
        model = TradePost
        fields = ('basePost', 'baseProductItem',)

    def create(self, validated_data):
        post =

您可以使用序列化器来表示字段,例如

class TradePostCreateSerializer(serializers.ModelSerializer):
    basePost = PostSerializer()
    baseProductItem = ProductItemSerializer()

    class Meta:
        model = TradePost
        fields = ('basePost', 'baseProductItem',)
参考:

如果您正在寻找可写嵌套序列化程序


您可以使用序列化程序来表示字段,例如

class TradePostCreateSerializer(serializers.ModelSerializer):
    basePost = PostSerializer()
    baseProductItem = ProductItemSerializer()

    class Meta:
        model = TradePost
        fields = ('basePost', 'baseProductItem',)
参考:

如果您正在寻找可写嵌套序列化程序

与类似,您可以尝试以下方法:

class TradePostCreateSerializer(serializers.ModelSerializer):
    basePost = PostCreateSerializer()
    baseProductItem = ProductItemCreateSerializer()

    class Meta:
        model = TradePost
        fields = ('basePost', 'baseProductItem',)

    def create(self, validated_data):
        # pop out the dict to create post and item, depend on whether you want to create post or not
        post = validated_data.get('basePost')
        product = validated_data.get('baseProductItem')
        # create post first
        trade_post = None
        post_obj = Post.objects.create(**post)
        if post_obj:
            # create product item
            prod_item = ProductItem.objects.create(basePost=post_obj, **product)
            trade_post = TradePost.objects.create(baseProduct=prod_item, **validated_data)
        return trade_post
对于python,请遵循命名约定并使用带有下划线的
小写字母,如
base\u product
base\u post
,它将更易于阅读

,类似于,您可以尝试以下方法:

class TradePostCreateSerializer(serializers.ModelSerializer):
    basePost = PostCreateSerializer()
    baseProductItem = ProductItemCreateSerializer()

    class Meta:
        model = TradePost
        fields = ('basePost', 'baseProductItem',)

    def create(self, validated_data):
        # pop out the dict to create post and item, depend on whether you want to create post or not
        post = validated_data.get('basePost')
        product = validated_data.get('baseProductItem')
        # create post first
        trade_post = None
        post_obj = Post.objects.create(**post)
        if post_obj:
            # create product item
            prod_item = ProductItem.objects.create(basePost=post_obj, **product)
            trade_post = TradePost.objects.create(baseProduct=prod_item, **validated_data)
        return trade_post

对于python,请遵循命名约定,使用带有下划线的
小写字母,如
base\u product
base\u post
,这样会更容易阅读

,我的意思是,它需要已经创建记录的pk值。或我是否理解错误?获取此{“basePost”:[“不正确的类型。预期的pk值,已接收的目录],“baseProductItem”:[“不正确的类型。预期的pk值,已接收的目录]}我的意思是,它需要已经创建记录的pk值。或我是否理解错误?获取此{“basePost”:[“不正确的类型。预期的pk值,收到的目录],“baseProductItem”:[“不正确的类型。预期的pk值,收到的目录”]}