当我想使用Rest框架创建其他实例时,我可以在哪里编写业务逻辑?

2024-04-16 07:28:44 发布

您现在位置:Python中文网/ 问答频道 /正文

当我使用Rest框架时,我可以在哪里编写自己的逻辑?在

我有一个序列化程序:

class OrderSerializer(ModelSerializer):
    order_num = serializers.SerializerMethodField()
    price = serializers.SerializerMethodField()

    class Meta:
        model = Order
        fields = ('name', 'room',  'price', 'order_num')

    def get_order_num(self, obj):
        return str(now()) + "111"
    def get_price(self, obj):
        print(obj, "liao obj")

        return "0.10"

我有一个观点:

^{pr2}$

模型如下:

class Room(models.Model):
    name = models.CharField(max_length=12)
    number = models.IntegerField()

class Order(models.Model):
    name = models.CharField(max_length=12)
    order_num = models.CharField(max_length=12)
    price = models.CharField(max_length=12)
    room = models.ForeignKey(to=Room, related_name="orders")
    start_time = models.DateTimeField(null=True, blank=True)
    end_time = models.DateTimeField(null=True, blank=True)

这个演示是我的测试演示,不在乎细节。在

我的目标是在访问视图/序列化程序时创建room的实例。在

enter image description here

你看快照,我可以创建订单实例成功,但我的目标是在创建订单时,我想创建一个房间实例(不在乎房间的初始数据,只是为了测试我们可以设置它为常量数据)。把房间的身份证还给我

我不知道在哪里创建房间实例逻辑。有些朋友能帮我吗?在


编辑

在django rest framework文档中,我发现可以重写create方法来实现我的需求:

class AlbumSerializer(serializers.ModelSerializer):
    tracks = TrackSerializer(many=True)

    class Meta:
        model = Album
        fields = ('album_name', 'artist', 'tracks')

    def create(self, validated_data):
        tracks_data = validated_data.pop('tracks')
        album = Album.objects.create(**validated_data)
        for track_data in tracks_data:
            Track.objects.create(album=album, **track_data)
        return album

但是,这是一个方面(意指在序列化程序中),如何在中实现视图.py? 在


Tags: 实例nametrueobjdataalbummodelsorder