当我想使用Rest Framework创建其他实例时,我可以编写业务逻辑吗?

时间:2017-11-21 07:11:34

标签: python django django-rest-framework

当我使用Rest Framework时,我可以自己编写逻辑?

我有一个序列化器:

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"

我有一个观点:

class OrderCreateAPIView(CreateAPIView):
    serializer_class = OrderSerializer
    queryset = Order.objects.all()

模型如下:

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)

这个演示是我的测试演示,不关心细节。

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

enter image description here

你看到了快照,我可以创建Order实例成功,但我的目标是在创建Order时,我想创建一个Room实例(不关心房间的初始数据,只是为了测试我们可以将它设置为常量数据)。并返回房间的身份证。

我不知道在哪里创建Room实例逻辑。有些朋友可以帮我吗?

修改

在django rest框架文档中,我发现我可以覆盖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

但是,这是一个方面(在序列化器中的意思),如何在views.py中实现?

0 个答案:

没有答案