Django Rest框架:如何在view类中操作模型的一个字段的值?
我有一个模型字段,我想用一些外部web服务的返回值填写poi_id:Django Rest框架:如何在view类中操作模型的一个字段的值?,django,python-2.7,django-rest-framework,Django,Python 2.7,Django Rest Framework,我有一个模型字段,我想用一些外部web服务的返回值填写poi_id: class Field(AbstractModel): field_id = models.AutoField("Unique ID for each field", primary_key=True) field_exid = models.CharField(max_length=15,blank=False,unique=True) field_desc = models.CharField(ma
class Field(AbstractModel):
field_id = models.AutoField("Unique ID for each field", primary_key=True)
field_exid = models.CharField(max_length=15,blank=False,unique=True)
field_desc = models.CharField(max_length=70,blank=True)
field_comment = models.CharField(max_length=70,blank=True)
field_country = models.IntegerField()#choices=ALL_COUNTRIES
field_city = models.IntegerField()#choices=ALL_CITIES
field_address = models.CharField(max_length=90,blank=True)
field_owner = models.ForeignKey(User,related_name='owner')
poi_id = models.UUIDField(editable=False)
last_user = models.ForeignKey(User,related_name='last_user')
此外,该用户将不得不发布经度和纬度,这些经度和纬度不会保存在模型中,但随后将发布到某个外部web服务,该服务将返回创建的poi的UUID。(我想在内部将其保存为poi_id值)
我的序列化程序如下所示:
class FieldSerializer(serializers.ModelSerializer):
class Meta:
model = Field
fields = ['field_exid','field_desc','field_comment','field_country',
'field_city','field_address','poi_id']
在我看来:
@api_view(['GET', 'POST'])
def fields_view(request):
if request.method == 'POST':
try:
poi_id = "00010203-0405-0607-0809-0a0b0c0d0e0f"
data = request.POST.copy()
data['poi_id'] = uuid.UUID(poi_id)
serializer = FieldSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response(serializer.data, status=status.HTTP_201_CREATED)
当我打印数据的值时,im传递到FieldSerializer im获取:
<QueryDict: {u'field_city': [u'1'], u'field_country': [u'941'],
u'poi_id': [UUID('00010203-0405-0607-0809-0a0b0c0d0e0f')],
u'longitude': [u'45.879'], u'field_address': [u'cenej 2'],
u'field_comment': [u'njiva'], u'field_desc': [u'njiva'],
u'latitude': [u'19.871'], u'field_exid': [u'njiva']}>
我做错了什么?好的,问题是序列化程序无法验证poi_id,因为我正在发送uuid.uuid对象,而这不是它所期望的。因此我在seializer中创建了poi_id uuid字段:
poi_id = serializers.UUIDField(format='hex_verbose')
并且必须将poi_id值作为字符串内部视图函数传递。您是否尝试删除
poi_id
字段的editable=False
?我认为这不是问题,因为我打印了serializer.data的值,而我得到的字典没有poi_id。{'field_city':1,'field_country':931,'field_address','field_comment':u'field','field_desc':u'field','field_exid':u'field1}序列化程序似乎无法验证uuid:
poi_id = serializers.UUIDField(format='hex_verbose')