Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/image-processing/2.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 framework 从django rest框架中的CustomField获取post数据_Django Rest Framework - Fatal编程技术网

Django rest framework 从django rest框架中的CustomField获取post数据

Django rest framework 从django rest框架中的CustomField获取post数据,django-rest-framework,Django Rest Framework,简而言之: 我有一个序列化程序django rest框架,它有两个自定义字段,它们与我的模型的字段不直接对应,并且具有不同的名称。to_internal_value方法可能有效,但我不知道如何访问这些字段的post数据 如果你需要我的案子的更多细节: 我有一个django模型,看起来像这样: class Requirement(models.Model): job = models.ForeignKey('Job', related_name = 'requirement

简而言之: 我有一个序列化程序django rest框架,它有两个自定义字段,它们与我的模型的字段不直接对应,并且具有不同的名称。to_internal_value方法可能有效,但我不知道如何访问这些字段的post数据

如果你需要我的案子的更多细节:

我有一个django模型,看起来像这样:

class Requirement(models.Model):
    job         = models.ForeignKey('Job', related_name = 'requirements')
    description = models.CharField(max_length = 140)
    is_must_have = models.BooleanField() # otherwise is of type b

class Job(models.Model):
    ...
{ "must_have": [must have requirements], "nice:to_have": [nice to have requirements] }
def perform_create(self, serializer):    
    nice_to_have = None
    must_have = None
    if 'nice_to_have' in self.request.data and self.request.data['nice_to_have'] != None:
        field = NiceToHaveField()
        nice_to_have = field.to_internal_value(self.request.data['nice_to_have'])

    if 'must_have' in self.request.data and self.request.data['must_have'] != None:
        field = MustHaveField()
        must_have = field.to_internal_value(self.request.data['must_have'])

    serializer.save(owner = self.request.user, nice_to_have = nice_to_have, must_have = must_have)      
我希望以如下方式序列化它:

class Requirement(models.Model):
    job         = models.ForeignKey('Job', related_name = 'requirements')
    description = models.CharField(max_length = 140)
    is_must_have = models.BooleanField() # otherwise is of type b

class Job(models.Model):
    ...
{ "must_have": [must have requirements], "nice:to_have": [nice to have requirements] }
def perform_create(self, serializer):    
    nice_to_have = None
    must_have = None
    if 'nice_to_have' in self.request.data and self.request.data['nice_to_have'] != None:
        field = NiceToHaveField()
        nice_to_have = field.to_internal_value(self.request.data['nice_to_have'])

    if 'must_have' in self.request.data and self.request.data['must_have'] != None:
        field = MustHaveField()
        must_have = field.to_internal_value(self.request.data['must_have'])

    serializer.save(owner = self.request.user, nice_to_have = nice_to_have, must_have = must_have)      
因此,我的序列化程序中有作业的自定义字段:

class JobSerializer(serializers.Serializer):
    nice_to_have = NiceToHaveField(source = 'requirements', allow_null = True)
    must_have = MustHaveField(source = 'requirements', allow_null = True)
NiceToHaveField和MustHaveField类simpy覆盖了to_表示法和to_内部值方法,to_表示法也会在类型之后对需求进行排序。 但是JobSerializer.create中经过验证的_数据从不包含这些cutom字段。我知道会调用to_internal_值并执行其工作,但结果是不可访问的


解决这个问题的方法是什么?

我找到了一个我不喜欢的解决方案,可能有更好的方法。无论如何,数据在view.request.data中是可用的。所以我使用了perform_create钩子,如下所示:

class Requirement(models.Model):
    job         = models.ForeignKey('Job', related_name = 'requirements')
    description = models.CharField(max_length = 140)
    is_must_have = models.BooleanField() # otherwise is of type b

class Job(models.Model):
    ...
{ "must_have": [must have requirements], "nice:to_have": [nice to have requirements] }
def perform_create(self, serializer):    
    nice_to_have = None
    must_have = None
    if 'nice_to_have' in self.request.data and self.request.data['nice_to_have'] != None:
        field = NiceToHaveField()
        nice_to_have = field.to_internal_value(self.request.data['nice_to_have'])

    if 'must_have' in self.request.data and self.request.data['must_have'] != None:
        field = MustHaveField()
        must_have = field.to_internal_value(self.request.data['must_have'])

    serializer.save(owner = self.request.user, nice_to_have = nice_to_have, must_have = must_have)