Необходимо получить значение внешнего ключа вместо ID в таблице базы данных с помощью Django
модель
class Project(models.Model):
project_name = models.CharField(max_length=20)
client= models.ForeignKey(Client,on_delete=CASCADE,related_name="Client1",default=None)
user=models.ManyToManyField(Default_User,related_name='users',default=None)
description=models.TextField()
type=models.TextField() #dropdown
start_date = models.DateTimeField(max_length=10)
end_date=models.DateTimeField(max_length=10)
technical_contact_name = models.CharField(max_length=30)
email=models.EmailField(max_length=254,default=None)
phone = PhoneField(blank=True)
delivery_head_contact_name=models.CharField(max_length=30)
class Meta:
db_table ='Project'
def __str__(self):
return self.project_name
модель
class Job(models.Model):
job_name=models.CharField(max_length=50)
user= models.ForeignKey(Default_User,on_delete=CASCADE)
project = ChainedForeignKey(Project,chained_field="user", chained_model_field="user",related_name='projects',show_all=False, auto_choose=True, sort=True)
date = models.DateField(max_length=10,default=None)
class Meta:
db_table ='Job'
def __str__(self):
return '{}'.format(self.job_name)
сериализаторы
class ProjectSerializers(serializers.ModelSerializer):
class Meta:
model= Project
fields= '__all__'
class Job_Serializers(serializers.ModelSerializer):
job = serializers.StringRelatedField()
class Meta:
model= Job
fields= ('id','job_name','user','project','date','job',)
Мне нужно получить значение внешнего ключа, отображаемое в таблице базы данных модели Job, но в соответствии с приведенным выше кодом он отображает ID внешнего ключа. Например, я связал модель проекта в модели Job и в таблице db отображается Project_id как(1,2,3), но мне нужно вернуть значения этого id как(app, learning и т.д.). Пожалуйста, помогите мне получить значения внешнего ключа вместо ID в таблице базы данных.
По умолчанию база данных будет брать уникальное поле из модели, а django предоставляет id в качестве уникального ключа для моделей. Это сделано для обеспечения согласованности данных. Поэтому вы можете оставить это и в сериализаторе заданий использовать SerializerMethodField для получения значения имени проекта на основе экземпляров объектов заданий.
Зависит от того, чего вы хотите добиться с его помощью. Если просто вернуть значение другого поля из проекта, то вы можете добавить его в сериализатор, как в примере ниже. Я также возвращаю имя_проекта.
class JobSerializers(serializers.ModelSerializer):
job = serializers.StringRelatedField()
project_name = serializers.SerializerMethodField()
class Meta:
model= Job
fields= ('id','job_name','user','project','date','job', 'project_name')
def get_project_name(self, job):
return job.project.project_name
Если вы хотите вернуть весь объект проекта, то вы должны включить
project = ProjectSerializers()