我有以下型号:
class SearchCity(models.Model):
city = models.CharField(max_length=200)
class SearchNeighborhood(models.Model):
city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
neighborhood = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
然后是以下嵌套序列化程序:
class CityNeighborhoodReadOnlySerializer(serializers.ModelSerializer):
searchneighborhood_set = serializers.PrimaryKeyRelatedField(many=True, read_only=True)
class Meta:
model = SearchCity
fields = ('city','searchneighborhood_set')
read_only_fields =('city', 'searchneighborhood_set')
Run Code Online (Sandbox Code Playgroud)
与视图配对:
class CityNeighborhoodView(ListAPIView):
queryset = SearchCity.objects.all()
serializer_class = CityNeighborhoodReadOnlySerializer
Run Code Online (Sandbox Code Playgroud)
当我进行 api 调用时,我得到了这个:
city: "Chicago"
searchneighborhood_set:
0: 5
1: 4
2: 3
city: "New York"
searchneighborhood_set:
0: 8
1: 7
2: 6
Run Code Online (Sandbox Code Playgroud)
我只是获取相关对象的主键。哪个好,我需要那个,但我也想要这个neighborhood名字,我怎么得到这个名字?
编辑:
这个问题可能会带来一些启发。他们没有使用与主键相关的序列化器,所以我的问题是(如果这当然有效,那么与主键相关的序列化器的意义是什么?
我正在创建一个新SearchNeighborhood对象并将其连接到请求中已经创建的SearchCity对象POST。
我有以下型号
class SearchCity(models.Model):
city = models.CharField(max_length=200)
class SearchNeighborhood(models.Model):
city = models.ForeignKey(SearchCity, on_delete=models.CASCADE)
neighborhood = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
我的相关序列化程序是:
class SearchNeighborhoodSerializer(serializers.ModelSerializer):
class Meta:
model = SearchNeighborhood
fields = ('pk', 'neighborhood')
Run Code Online (Sandbox Code Playgroud)
我的观点和相关方法是:
class CityNeighborhoodsListCreate(APIView):
def post(self, request, *args, **kwargs):
citypk = kwargs.get('citypk', None)
city=get_object_or_404(SearchCity,pk=citypk)
serialized = SearchNeighborhoodSerializer(data=request.data)
if serialized.is_valid(raise_exception=True):
validatedData = serialized.validated_data
neighborhood = validatedData.get('neighborhood')
neighborhoodobject = SearchNeighborhood(neighborhood= neighborhood, city = city)
neighborhoodobject.save()
createdneighborhood = SearchNeighborhoodSerializer(neighborhoodobject)
return Response({
'neighborhood': createdneighborhood.data
})
Run Code Online (Sandbox Code Playgroud)
我正在使用 Angular 4
我的AJAX要求是: …
post bad-request deserialization django-rest-framework angular
我收到以下错误:
AttributeError: Got AttributeError when attempting to get a value for field `city` on serializer `SearchCitySerializer`
Run Code Online (Sandbox Code Playgroud)
我的序列化程序是正确的,除非我明显遗漏了一些东西。
这是我的模型:
class SearchCity(models.Model):
city = models.CharField(max_length=200)
Run Code Online (Sandbox Code Playgroud)
这是我的序列化程序
class SearchCitySerializer(serializers.ModelSerializer):
class Meta:
model = SearchCity
fields = ('pk','city')
Run Code Online (Sandbox Code Playgroud)
*** 我在没有 pk 的情况下尝试了序列化程序,但仍然失败
在这里它在视图中使用:
from serializers import SearchCitySerializer
def get(self, request, format=None):
searchcityqueryset = SearchCity.objects.all()
serializedsearchcity = SearchCitySerializer(searchcityqueryset)
return Response({
'searchcity': serializedsearchcity.data,
})
Run Code Online (Sandbox Code Playgroud)
我得到的完整错误:
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/suitsandtables/suitsandtablessettingsapp/views.py", line 37, in get
'searchcity': serializedsearchcity.data,
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/local/lib/python2.7/site-packages/rest_framework/serializers.py", line 537, in data
ret = super(Serializer, self).data
File "/home/rickus/Documents/softwareProjects/211hospitality/suitsandtables/backend/virtualsuits/local/lib/python2.7/site-packages/rest_framework/serializers.py", line …Run Code Online (Sandbox Code Playgroud) django serialization model attributeerror django-rest-framework