如何在Django-Rest中序列化嵌套模型

时间:2018-07-16 11:06:43

标签: django serialization django-models django-rest-framework

我一直在尝试使用旧数据库。我已经使用inscpectdb创建了模型文件,但是现在无法在表上执行联接。

我有两个表job_info和username_userid。

这是我的models.class文件:

class UseridUsername(models.Model):
    userid = models.IntegerField(blank=True, null=True)
    username = models.CharField(max_length=100, blank=True, null=True)

    class Meta:
       managed = False
       db_table = 'userid_username'

class LinuxJobTable(models.Model):
    job_db_inx = models.AutoField(primary_key=True)
    mod_time = models.IntegerField()
    account = models.TextField(blank=True, null=True)
    exit_code = models.IntegerField()
    job_name = models.TextField()
    id_job = models.IntegerField()
    id_user = models.OneToOneField(UseridUsername , on_delete=models.CASCADE,db_column="id_user")
    class Meta:
        managed = False
        db_table = 'linux_job_table'

现在如何从LinuxJobTable中获取所有值,并从UseridUsername中获取相应用户的用户名。

Heren是我的可序列化的类:

class UseridUsernameSerializer(serializers.ModelSerializer):
    class Meta:
        model = UseridUsername
        fields = ('userid','username')

class UserSerializer(serializers.ModelSerializer):
class Meta:
    username =  UseridUsernameSerializer(many=False)
    model = LinuxJobTable
    fields = ('account','mod_time','username')

当我尝试访问它时,它给出了“字段名称username对于模型LinuxJobTable无效。”错误。

1 个答案:

答案 0 :(得分:2)

由于UserSerializer搜索一个名为username的关联字段而没有找到一个相关字段,因此出现了错误。在您的情况下,ralated字段被命名为 id_user ,因此您必须通过source参数对其进行提及。

所以,尝试这个

class UserSerializer(serializers.ModelSerializer):
    username = UseridUsernameSerializer(many=False, source='id_user')
    class Meta:
        model = LinuxJobTable
        fields = ('account', 'mod_time', 'username')