2017-01-18 4 views
0

Чтобы сделать его коротким: У меня есть сериализатор (django rest framework), который имеет два настраиваемых поля, которые непосредственно не соответствуют полю моей модели, а также имеют другое имя. Метод to_internal_value() (возможно) работает, но я не знаю, как получить доступ к почтовым данным этих полей.Получить данные из CustomField в каркасе отдыха 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] } 

Поэтому, у меня есть собственные поля в моем сериализаторе вакансии:

class JobSerializer(serializers.Serializer): 
    nice_to_have = NiceToHaveField(source = 'requirements', allow_null = True) 
    must_have = MustHaveField(source = 'requirements', allow_null = True) 

Симметричные классы NiceToHaveField и MustHaveField переопределяют методы to_representation() и to_internal_value(), to_representation также сортирует требования после типа. Но validated_data в JobSerializer.create никогда не содержит эти поля cutom. Я знаю, что to_internal_value вызывается и выполняет свою работу, но результаты недоступны.

Каков способ решения проблемы?

ответ

0

Я нашел решение, которое мне не нравится, возможно, это лучший способ сделать это. В любом случае данные доступны в представлении view.request.data. Таким образом, я использовал крюк perform_create следующим образом:

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)  
Смежные вопросы