2017-02-17 13 views
0

У меня есть две модели со многими отношениями.Как отобразить вложенную модель как список ее первого поля

class MyModel(models.Model): 
    value = models.CharField(max_length=255) 
    tests = models.ManyToManyField(to='Test', null=True, related_name='models') 


class Test(models.Model): 
    name = models.CharField(max_length=255) 

То, что я пытаюсь сделать это, чтобы показать «» MyModel как список его поле «значение». Вот мои сериализаторы (довольно просто, а):

class MyModelSerializer(serializers.Serializer): 
    value = serializers.CharField() 

    class Meta: 
     model = models.MyModel 
     fields = ('value',) 


class TestSerializer(serializers.ModelSerializer): 
    models = MyModelSerializer(many=True, read_only=True) 

    class Meta: 
     model = models.Test 
     fields = ('name','models') 

До сих пор я получаю список объектов:

"name": "", 
"models": [ 
    { 
     "value": "question" 
    } 
] 

Есть ли способ, чтобы отобразить «значения» полей в виде списка строк не список объектов?

Важно, я бы хотел избежать методов сериализации или любых методов в моделях. Есть ли встроенный способ?

ОБНОВЛЕНО Если кто-то заинтересован в решении я в конечном итоге переопределение «метод to_representation в MyModelSerializer и получил желаемый результат. Вот сериализатору:

class MyModelSerializer(serializers.Serializer): 

    class Meta: 
     model = models.MyModel 

    def to_representation(self, instance): 
     return instance.value 

ответ

0

Попробуйте метод values_list.

items = MyModel.objects.all().values_list('values', flat=True) 

Результатом этого будет список строк, представляющих значение, хранящееся в поле «значения».

+0

Я хотел бы избежать любых методов в сериализаторе и модели. Есть ли встроенный метод, например ListField для многих-ко-многим? –

+1

[values_list] (https://docs.djangoproject.com/en/1.10/ref/models/querysets/#values-list) является встроенным способом. Это метод, используемый в QuerySet, а не в экземпляре модели. Если это не соответствует вашим критериям, я не думаю, что есть какой-либо другой «встроенный» способ достижения этого. – Neelik

 Смежные вопросы

  • Нет связанных вопросов^_^