Python 如何从序列化程序中的另一个模型访问外键字段
我试图从我的序列化程序中的另一个模型访问一些字段,但无论如何都无法让它工作。这是我的做法。 以下是我的模型:Python 如何从序列化程序中的另一个模型访问外键字段,python,django-models,django-rest-framework,django-views,django-serializer,Python,Django Models,Django Rest Framework,Django Views,Django Serializer,我试图从我的序列化程序中的另一个模型访问一些字段,但无论如何都无法让它工作。这是我的做法。 以下是我的模型: class Category(models.Model): name = models.CharField(max_length=256) class Meta: ordering = ('name',) def __str__(self): return self.name class Contact(models.Mod
class Category(models.Model):
name = models.CharField(max_length=256)
class Meta:
ordering = ('name',)
def __str__(self):
return self.name
class Contact(models.Model):
first_name = models.CharField(max_length=256)
last_name = models.CharField(max_length=256)
address = models.CharField(max_length=1024)
city = models.CharField(max_length=256)
country = models.ForeignKey(Country, on_delete=models.CASCADE)
email = models.EmailField(max_length=256, unique=True)
phone = models.CharField(max_length=256)
category = models.ForeignKey(Category, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
integration = models.ForeignKey(Integration, null=True, on_delete=models.SET_NULL)
def __str__(self):
return self.first_name
class Company(models.Model):
name = models.CharField(max_length=256)
address = models.CharField(max_length=256)
city = models.CharField(max_length=256)
country = models.ForeignKey(Country, on_delete=models.CASCADE)
user = models.ForeignKey(User, on_delete=models.CASCADE)
def __str__(self):
return self.name
class ContactCompany(models.Model):
contact = models.ForeignKey(Contact, on_delete=models.CASCADE, related_name='job')
company = models.ForeignKey(Company, on_delete=models.CASCADE, related_name='company')
job = models.TextField(blank=True, help_text='Job', max_length=5000, null=True)
started_at = models.DateTimeField(auto_now_add=True)
finished_at = models.DateTimeField(auto_now=True)
def __str__(self):
return self.job
这是我的序列化程序
class ContactSerializer(serializers.ModelSerializer):
country_name = serializers.CharField(source='country.name')
category_name = serializers.CharField(source='category.name')
user_name = serializers.CharField(source='user.email')
integration_name = serializers.CharField(source='integration.name')
class Meta:
model = Contact
fields = ('first_name', 'last_name', 'address', 'city', 'country_name', 'email', 'phone',
'category_name', 'user_name', 'integration_name', 'job', )
如何在此序列化程序中从ContactCompany模型访问company字段
下面是API响应的样子
{
"first_name": "First name",
"last_name": "Last name",
"address": "Address",
"city": "City",
"country_name": "Gabon",
"email": "saidsadiasida@gmam.com",
"phone": "0712345678",
"category_name": "TestCategory",
"user_name": "ekartdragos@cyberaxo.com",
"integration_name": "testmonth",
"job": [
4
]
}
我怎样才能得到显示的工作文本而不是id?一个可能的解决方案是使用并获得您想要的信息
class ContactSerializer(serializers.ModelSerializer):
country\u name=serializers.CharField(source='country.name')
category\u name=serializers.CharField(source='category.name')
user\u name=serializers.CharField(source='user.email')
integration\u name=serializers.CharField(source='integration.name')
company=serializers.SerializerMethodField()
类元:
型号=触点
字段=(‘姓’、‘名’、‘地址’、‘城市’、‘国家名’、‘电子邮件’、‘电话’,
“类别名称”、“用户名”、“集成名称”、“职务”、“公司”)
def get_公司(自身、obj):
"""
首先从对象id中获取ContactCompany实例,然后获取公司信息
"""
尝试:
contact\u company=ContactCompany.objects.get(contact=obj.id)
预期ContactCompany.DoesNotExist:
#在这一天返回或提升你的欲望
return contact_company.company#这里我们有这个联系人的公司id,我们也可以从中生成所有公司信息。
一个可能的解决方案是使用并获取您想要的信息
class ContactSerializer(serializers.ModelSerializer):
country\u name=serializers.CharField(source='country.name')
category\u name=serializers.CharField(source='category.name')
user\u name=serializers.CharField(source='user.email')
integration\u name=serializers.CharField(source='integration.name')
company=serializers.SerializerMethodField()
类元:
型号=触点
字段=(‘姓’、‘名’、‘地址’、‘城市’、‘国家名’、‘电子邮件’、‘电话’,
“类别名称”、“用户名”、“集成名称”、“职务”、“公司”)
def get_公司(自身、obj):
"""
首先从对象id中获取ContactCompany实例,然后获取公司信息
"""
尝试:
contact\u company=ContactCompany.objects.get(contact=obj.id)
预期ContactCompany.DoesNotExist:
#在这一天返回或提升你的欲望
return contact_company.company#这里我们有这个联系人的公司id,我们也可以从中生成所有公司信息。