0

У меня есть эта модель:Джанго ФПИ покинул присоединиться

class Env(models.Model): 
    env_name = models.CharField(max_length=100, unique=True) 
    is_enabled = models.CharField(max_length=1, choices=ENABLED, default='Y') 

    def __unicode__(self): 
     return unicode(self.env_name) 

У меня тоже есть эта модель ...

class Hosts(models.Model): 
    host_name = models.CharField(max_length=200, unique=True) 
    host_variables = jsonfield.JSONField() 
    host_env = models.ForeignKey(Env, models.DO_NOTHING, related_name='host_env') 

Я хотел бы иметь упорядоченное представление, эквивалентное объединение.

Я пытаюсь получить строки, содержащие host_name и env_name

Я не могу показаться, чтобы найти правильный способ сериализации это

Я до сих пор ...

class HostSerializer(serializers.HyperlinkedModelSerializer): 
    class Meta: 
    model = Hosts 
    fields = ('host_name', 'ip_address', 'is_enabled','is_managed','managed_users') 

Я не могу найти правильный способ получить имя env в каждой строке результатов моих хостов.

Что мне не хватает?

ответ

1

Вы можете попробовать

class HostSerializer(serializers.HyperlinkedModelSerializer): 
    env_name = serializers.ReadOnlyField(source='host_env.env_name') 
    class Meta: 
     model = Hosts 
     fields = ('host_name', 'ip_address', 'is_enabled','is_managed','managed_users', 'env_name',) 
1

Сериализатор обрабатывает только одну модель, поэтому все, что вы хотите добавить, должно быть добавлено явно.

Если вы просто хотите добавить env_name, вы можете использовать SerializerMethodField поле, как это:

class HostSerializer(serializers.HyperlinkedModelSerializer): 
    env_name = serializers.SerializerMethodField() 
    class Meta: 
    model = Hosts 
    fields = ('host_name', 'env_name', 'ip_address', 'is_enabled','is_managed', 
       'managed_users',) 

    def get_env_name(self, obj): 
     host_env = obj.host_env 
     if host_env: 
      return str(host_env.env_name) 
     return None 

Заметьте, что вы можете захотеть взглянуть на вложенные сериализаторов, но это было бы производить что-то вроде:

{ 
    'host_name': 'my host name', 
    'host_env': { 
     'env_name': 'My env name' 
    } 
} 

См http://www.django-rest-framework.org/api-guide/relations/#nested-relationships для этого (не объясняя, что, как это не ваш О.П., но дает его вам в качестве эталона для потенциально лучшего способа)

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

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