Необходимо получить значение внешнего ключа вместо 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()

Вернуться на верх