class PropertyViewSet(LoginRequiredMixin, PermissionMixin, AtomicMixin, viewsets.ModelViewSet):
serializer_class = PropertySerializer
model = Property
queryset = Property.objects.all()
code_name = PERMISSION_PROPERTY
def create(self, request, *args, **kwargs):
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
self.perform_create(serializer)
headers = self.get_success_headers(serializer.data)
name = request.data['name']
city = City.objects.get(pk=request.data['city'])
p = Pinyin()
no = '%s%s' % (city.phone_code, p.get_initials(name, u''))
property = Property.objects.get(pk=serializer.data['id'])
property.no = no
property.save_attr(request.data)
return Response(serializer.data, status=status.HTTP_201_CREATED,
headers=headers)
def retrieve(self, request, *args, **kwargs):
instance = self.get_object()
serializer = self.get_serializer(instance)
property = serializer.data
province = Province.objects.filter(pk=property['province']).first()
if province:
province = ProvinceSerializer(province).data
property['province'] = province
city = City.objects.filter(pk=property['city']).first()
if city:
city = CitySerializer(city).data
property['city'] = city
area = Area.objects.filter(pk=property['area']).first()
if area:
area = AreaSerializer(area).data
property['area'] = area
if Decimal(property['avg_price']) == -1:
property['avg_price'] = '待定'
for key in property.keys():
if type(property[key]) != int and not property[key]:
property[key] = 'N/A'
property['args'] = instance.tag_args()
return Response(property, status=status.HTTP_200_OK)
def destroy(self, request, *args, **kwargs):
instance = self.get_object()
instance.active = False
instance.save()
import datetime
instance.apartments.update(active=False,update_time=datetime.datetime.now())
return Response({}, status=status.HTTP_200_OK)
@list_route(methods=['get'])
def search(self, request):
no = self.request.GET.get('no', None)
try:
property = Property.objects.filter(no=no, active=True)
except Exception:
return Response(status=status.HTTP_400_BAD_REQUEST)
if not property.exists():
return Response(status=status.HTTP_404_NOT_FOUND)
property = property[0]
serializer = PropertySerializer(property)
property = serializer.data
province = ProvinceSerializer(
Province.objects.get(pk=property['province'])).data
property['province'] = province
city = CitySerializer(City.objects.get(pk=property['city'])).data
property['city'] = city
area = AreaSerializer(Area.objects.get(pk=property['area'])).data
property['area'] = area
return Response(property, status=status.HTTP_200_OK)
def update(self, request, *args, **kwargs):
partial = kwargs.pop('partial', False)
instance = self.get_object()
serializer = self.get_serializer(instance, data=request.data,
partial=partial)
serializer.is_valid(raise_exception=True)
self.perform_update(serializer)
city = City.objects.get(pk=request.data['city'])
p = Pinyin()
name = request.data['name']
no = '%s%s' % (city.phone_code, p.get_initials(name, u''))
property = Property.objects.get(pk=serializer.data['id'])
property.no = no
property.save_attr(request.data)
return Response(serializer.data)
@list_route(methods=['get'])
def args(self, request):
labels = Label.objects.prefetch_related('values').filter(active=True)
args = []
for label in labels:
values = label.values.all()
value_array = []
for value in values:
if not value.active:
continue
if value.value:
value_array.append(value.value)
if Property.tag_attr_map.get(label.name):
args.append({'name':label.name,'data-for':Property.tag_attr_map.get(label.name),'choices':value_array,'type':label.label_type})
else:
args.append({'name': label.name,
'data-for': label.name,
'choices': value_array,'type':label.label_type})
return Response(args,status=status.HTTP_200_OK)
RESTful 序列化问题搞得头大,搜关键词不能顺利搜索到想要的结果。请教诸位:
perform_create
执行了什么?headers = self.get_success_headers(serializer.data)
取头部又是干嘛来着?在方法内部使用
import datetime
好嘛?