如何使用来自两个不同Django模型的两个参数过滤数据

我想创建一个JSON对象

  1. 通过特定的emp_id从“ EmpProject”模型中搜索特定的项目

  2. 借助(1.)搜索结果,从模型“项目”中搜索项目状态为“待处理”。

我正在使用JSON解析器(无模型或通用视图)

模型

下面是我的模型,我没有使用多对多字段,而是创建了一个中间表,如果通过使用manytomanyfield而不是建议也可以解决问题的话


class Employee(models.Model):
    employeeid = models.IntegerField()
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    phone_no = models.CharField(max_length=10)
    date_of_birth = models.DateField()
    email = models.EmailField(unique=True)
    password = models.CharField(max_length=50)
    designation = models.CharField(max_length=50)
    dept_id = models.ForeignKey(Department,on_delete=models.SET_NULL,null=True,blank=True)

    class Meta:
        ordering = ('id',)

    def __str__(self):
        return self.emp_name


class Project(models.Model):
    projectname = models.CharField(max_length=50,unique=True,)
    project_status = models.CharField(max_length=50)
    description = models.TextField()
    start_date = models.DateField(auto_now_add=True)
    due_date = models.DateField()

    class Meta:
        ordering = ('id',)

    def __str__(self):
        return self.projectname

class EmpProject(models.Model):
    emp_id = models.ForeignKey(Employee,blank=True)
    project_id = models.ForeignKey(Project,blank=True)

    class Meta:
        unique_together = [['emp_id','project_id']]
        ordering = ('project_id',)

    def __str__(self):
        return self.emp_id

序列化器

class EmployeeSerializer(serializers.ModelSerializer):
    dept_id = serializers.SlugRelatedField(queryset=Department.objects.all(),slug_field='dept_name')

    class Meta:
        model = Employee
        fields = [
            'id','employeeid','first_name','last_name','phone_no','date_of_birth','email','password','designation','dept_id',]


class ProjectSerializer(serializers.ModelSerializer):

    class Meta:
        model = Project
        fields = [
            'id','projectname','project_status','description','start_date','due_date',]


class EmpProjectSerializer(serializers.ModelSerializer):
    emp_id=serializers.SlugRelatedField(queryset=Employee.objects.all(),slug_field='employeeid')
    project_id=serializers.SlugRelatedField(queryset=Project.objects.all(),slug_field='projectname')
    class Meta:
        model = EmpProject
        fields = [
            'emp_id','project_id',]
xy328545073 回答:如何使用来自两个不同Django模型的两个参数过滤数据

您可以尝试以下操作:

Project.objects.filter(id__in=EmpProject.objects.filter(id__in=emp_id).values("project_id"),project_status="Pending")

几点值得一提:

  1. 当我们要获取与关联有关的额外数据时,最好使用中间表。对此,请查看through https://docs.djangoproject.com/en/2.2/ref/models/fields/#django.db.models.ManyToManyField.through
  2. 支持的ManyToManyField属性
  3. project_statusCharField,我认为您应该考虑ChoiceField,charfield可能会在数据库中引入很多脏数据。
本文链接:https://www.f2er.com/3168315.html

大家都在问