当我使用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)
这个演示是我的测试演示,不关心细节。
我的目标是在访问视图/序列化程序时创建一个房间实例。
你看到了快照,我可以创建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中实现?