我一直在尝试使用旧数据库。我已经使用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
无效。”错误。
答案 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')