Ale*_*y K 3 django django-rest-framework
我尝试序列化查询集
def do(self):
reservations = Reservation.objects.all()
serializer = ReservationSerializer(data=reservations, many=True)
if serializer.is_valid():
encoded_data = json.dumps(serializer.data)
r = requests.post('http://httpbin.org/post', headers={'Content-Type': 'application/json'}, data=encoded_data)
print(r.text)
else:
print(serializer.errors)
Run Code Online (Sandbox Code Playgroud)
我总是得到错误
{u'non_field_errors':[u'expected一个项目列表,但得到类型"QuerySet".']}
我试图values()在查询集上使用,然后转换为列表,但这样我得到没有嵌套模型的对象
模型
class Reservation(models.Model):
start = models.DateField(verbose_name='?????', auto_now=False, auto_now_add=False, blank=False)
end = models.DateField(verbose_name='?????', auto_now=False, auto_now_add=False, blank=False)
check_in_time = models.TimeField(verbose_name='????? ??????', blank=False)
check_out_time = models.TimeField(verbose_name='????? ??????', blank=False)
has_refund = models.BooleanField(verbose_name='?????????? ?????', default=True)
payed = models.BooleanField(verbose_name='????????', default=False)
reserved_days = models.ManyToManyField(Day, blank=False)
additional_services = models.ManyToManyField(AdditionalService)
guest_name = models.CharField(verbose_name='??? ?????', max_length=200, blank=True)
reservation_number = models.CharField(verbose_name='????? ?????', max_length=200, blank=True)
class AdditionalService(models.Model):
payment_date = models.CharField(verbose_name='???? ??????', max_length=200, blank=True)
payment_type = models.CharField(verbose_name='????? ??????', max_length=200, blank=False)
service = models.CharField(verbose_name='??????', max_length=200, blank=False)
quantity = models.IntegerField(blank=False)
price = models.FloatField(blank=False)
class Day(models.Model):
date = models.DateField(auto_now=False, auto_now_add=False)
price = models.FloatField()
payment_method = models.CharField(max_length = 200, blank=True)
payment_date = models.CharField(max_length=200, blank=True)
room = models.ForeignKey(Room, null=True, blank=True, verbose_name='?????', on_delete=models.CASCADE)
class Room(models.Model):
name = models.CharField(max_length = 200, null=True)
id = models.AutoField(primary_key=True)
room_id = models.CharField(max_length = 200, null=False)
def __unicode__(self):
return self.name
Run Code Online (Sandbox Code Playgroud)
串行
class ReservationSerializer(serializers.ModelSerializer):
reserved_days = DaySerializer(many=True)
additional_services = AdditionalServicesSerializer(many=True)
class Meta:
model = Reservation
fields = [
'start',
'end',
'check_in_time',
'check_out_time',
'reserved_days',
'additional_services',
'has_refund',
'payed',
'guest_name',
'reservation_number',
]
class DaySerializer(serializers.ModelSerializer):
room = RoomSerializer()
class Meta:
model = Day
fields = [
'date',
'price',
'payment_method',
'payment_date',
'room',
]
class AdditionalServicesSerializer(serializers.ModelSerializer):
class Meta:
model = AdditionalService
fields = [
'payment_date',
'payment_type',
'service',
'quantity',
'price',
]
class RoomSerializer(serializers.ModelSerializer):
class Meta:
model = Room
fields = [
'room_id',
]
Run Code Online (Sandbox Code Playgroud)
nev*_*ner 10
对于序列化,您不需要使用data关键字,只需将queryset作为第一个位置参数传递:
serializer = ReservationSerializer(reservations, many=True)
return serializer.data
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1540 次 |
| 最近记录: |