Необходимо получить два определенных значения полей из одной модели в другую по отдельности в django API rest framework

модель 1

class Users(models.Model):

    employee_name = models.CharField(max_length=50)
    dob=models.DateField(max_length=8) 
    email=models.EmailField(max_length=254,default=None) 
    pancard=models.CharField(max_length=25,default=None)
    aadhar=models.CharField(max_length=20,default=None)
    personal_email_id=models.EmailField(max_length=254,default=None)
    phone = PhoneField(blank=True)
    emergency_contact_no=models.IntegerField(default=None)
    emergency_contact_name=models.CharField(max_length=100,null=True)
    relation=models.CharField(max_length=25,default=None)
    blood_group=models.CharField(max_length=25,choices=BLOOD_GROUP_CHOICES,null=True)  
    desingnation=models.ForeignKey(Designation,on_delete=CASCADE,related_name="desingnation")
    billable_and_non_billable=models.CharField(max_length=25,choices=BILLABLE_and_NON_BILLABLE_CHOICES,default='Billable')
    joining_date=models.DateField(max_length=15,null=True)
    relieving_date=models.DateField(max_length=15,null=True)
    
    def __str__(self):
        return self.employee_name

модель 2

class Consolidated(models.Model):
    
    emp_name=models.ForeignKey(Users,on_delete=CASCADE)
    proj_name=models.ForeignKey(Project,on_delete=CASCADE)
    custom_name=models.ForeignKey(Client,on_delete=CASCADE)
    Cons_date=models.ForeignKey(Add_Timelog,on_delete=CASCADE)
    bill_no_bill=models.ForeignKey(Users,on_delete=CASCADE,related_name="billable_and_non_billable+")
    
    def __str__(self):
       return str(self.emp_name)

Сериализаторы

class UserSerializers(serializers.ModelSerializer):
class Meta:
        model= Users
        fields = '__all__'

class Consolidated_serializers(serializers.ModelSerializer):
    
    class Meta:
        model=Consolidated
        fields= '__all__'

Виды

class UserViewset(viewsets.ModelViewSet):
    permission_classes=(permissions.IsAdminUser,)
    queryset=models.Users.objects.all()
    serializer_class=serializers.UserSerializers

class Consolidated_ViewSet(viewsets.ModelViewSet):
    permission_classes=(permissions.IsAdminUser,)
    queryset=models.Consolidated.objects.all()
    serializer_class=serializers.Consolidated_serializers

На самом деле я застрял на середине, так как мне нужно взять значения из поля 'billable_and_non_billable' из модели Users и отобразить эти значения в поле Consolidated модели bill_no_bill. С помощью приведенного выше кода я могу только взять значения employee_name из модели Users в emp_name из модели Consolidated и то же самое значение отображается в поле bill_no_bill. Пожалуйста, помогите мне найти какие-либо пути решения этой проблемы, так как я новичок в этом Django. По сути, это должен быть API, который работает с методом GET.

Вы получаете одно и то же значение, потому что вы используете внешний ключ к модели пользователя для emp_name и bill_no_bill. Внешние ключи используются для отношений "многие к одному" между моделями. См: https://docs.djangoproject.com/en/4.0/topics/db/examples/many_to_one/

Таким образом, ваша консолидированная модель должна быть следующей:

Class Consolidated(models.Model):
    employee=models.ForeignKey(Users,on_delete=CASCADE)
    project=models.ForeignKey(Project,on_delete=CASCADE)
    custom_name=models.ForeignKey(Client,on_delete=CASCADE)
    cons_date=models.ForeignKey(Add_Timelog,on_delete=CASCADE)

Для получения значений этих полей вы можете использовать Вложенное представление объектов в сериализации DRF.

Альтернативно вы можете переопределить метод to_representation сериализатора или SerializerMethodField

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