0

型号 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下显示这些值。使用上面的代码,我只能将模型中的值带到模型中,并且在字段中显示相同的值。请帮我找到解决这个问题的任何方法,因为我是这个 Django 的新手。基本上它需要一个操作 GET 方法的 API。Consolidatedbill_no_billemployee_nameUsersemp_nameConsolidatedbill_no_bill

4

1 回答 1

0

您将获得相同的价值,因为您对用户模型使用外键emp_namebill_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 序列化程序中的嵌套对象表示

因此合并的序列化程序变为:

class ConsolidatedSerializer(serializers.ModelSerializer):
    employee = UserSerializer()
    class Meta:
        model = Consolidated
        fields = ['employee', 'project', 'custom', 'date']

bill_no_bill字段将是视图集中返回对象的一部分。

或者,您可以覆盖序列化程序或SerializerMethodField的 to_representation 方法

于 2022-02-14T09:01:39.097 回答