Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django Rest框架:如何在view类中操作模型的一个字段的值?_Django_Python 2.7_Django Rest Framework - Fatal编程技术网

Django Rest框架:如何在view类中操作模型的一个字段的值?

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

我有一个模型字段,我想用一些外部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(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')