Python 从一个模型查询数据,从另一个模型筛选数据

Python 从一个模型查询数据,从另一个模型筛选数据,python,django,Python,Django,我希望显示一个表中的值,但根据另一个表中的值筛选这些值 例如:我想显示data/models.py中的值,这些值由CustomUser表(accounts/models.py)中的customer_标记过滤。 这些是相关的表,但我无法找出正确的语法来过滤此视图。 有什么想法吗?或者这在我当前的模式下是不可能的 数据/视图.py from django.views.generic import ListView, DetailView from django.views.generic.edit

我希望显示一个表中的值,但根据另一个表中的值筛选这些值

例如:我想显示data/models.py中的值,这些值由CustomUser表(accounts/models.py)中的customer_标记过滤。 这些是相关的表,但我无法找出正确的语法来过滤此视图。 有什么想法吗?或者这在我当前的模式下是不可能的

数据/视图.py

from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, DeleteView, CreateView
from django.urls import reverse_lazy
from .models import Data
from django.contrib.auth.mixins import LoginRequiredMixin
from rest_framework import generics
from .models import Data
from accounts.models import CustomUser
from .serializers import DataSerializer
from .permissions import IsAuthorOrReadOnly

class DataListView(LoginRequiredMixin,ListView):
    queryset = Data.objects.all()
    context = {
        "object_list": queryset
    }
    template_name = 'data_list.html'
    login_url = 'login'
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    customer_Tag = models.CharField(max_length=50,)
    isAdmin = models.BooleanField(default = False,)
    notifications = models.BooleanField(default = True,)
    deviceSerial= models.CharField(max_length=50,)
    machineName= models.CharField(max_length=50,default="ESP1",)
    machineDescription = models.CharField(max_length=200,)

class Customer(models.Model):
    customerTag= models.CharField(max_length=50,) 
    customerName = models.CharField(max_length=50,)
    mainContact = models.CharField(max_length=100,default='',)
    Address = models.CharField(max_length=100,default='',)
    city = models.CharField(max_length=100,default='',)
    website = models.URLField(max_length=100,default='',)
    phone = models.IntegerField(default=0,)

    def __str__(self):
        return self.customerName
from django.db import models
from django.conf import settings
from django.contrib.auth import get_user_model


class Data(models.Model):
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,)
    tempData= models.CharField(max_length=50,blank=True,)
    humidData= models.CharField(max_length=50,blank=True,)


def __str__(self):
    return str(self.author)
客户/型号.py

from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, DeleteView, CreateView
from django.urls import reverse_lazy
from .models import Data
from django.contrib.auth.mixins import LoginRequiredMixin
from rest_framework import generics
from .models import Data
from accounts.models import CustomUser
from .serializers import DataSerializer
from .permissions import IsAuthorOrReadOnly

class DataListView(LoginRequiredMixin,ListView):
    queryset = Data.objects.all()
    context = {
        "object_list": queryset
    }
    template_name = 'data_list.html'
    login_url = 'login'
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    customer_Tag = models.CharField(max_length=50,)
    isAdmin = models.BooleanField(default = False,)
    notifications = models.BooleanField(default = True,)
    deviceSerial= models.CharField(max_length=50,)
    machineName= models.CharField(max_length=50,default="ESP1",)
    machineDescription = models.CharField(max_length=200,)

class Customer(models.Model):
    customerTag= models.CharField(max_length=50,) 
    customerName = models.CharField(max_length=50,)
    mainContact = models.CharField(max_length=100,default='',)
    Address = models.CharField(max_length=100,default='',)
    city = models.CharField(max_length=100,default='',)
    website = models.URLField(max_length=100,default='',)
    phone = models.IntegerField(default=0,)

    def __str__(self):
        return self.customerName
from django.db import models
from django.conf import settings
from django.contrib.auth import get_user_model


class Data(models.Model):
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,)
    tempData= models.CharField(max_length=50,blank=True,)
    humidData= models.CharField(max_length=50,blank=True,)


def __str__(self):
    return str(self.author)
数据/模型.py

from django.views.generic import ListView, DetailView
from django.views.generic.edit import UpdateView, DeleteView, CreateView
from django.urls import reverse_lazy
from .models import Data
from django.contrib.auth.mixins import LoginRequiredMixin
from rest_framework import generics
from .models import Data
from accounts.models import CustomUser
from .serializers import DataSerializer
from .permissions import IsAuthorOrReadOnly

class DataListView(LoginRequiredMixin,ListView):
    queryset = Data.objects.all()
    context = {
        "object_list": queryset
    }
    template_name = 'data_list.html'
    login_url = 'login'
from django.db import models
from django.contrib.auth.models import AbstractUser

class CustomUser(AbstractUser):
    customer_Tag = models.CharField(max_length=50,)
    isAdmin = models.BooleanField(default = False,)
    notifications = models.BooleanField(default = True,)
    deviceSerial= models.CharField(max_length=50,)
    machineName= models.CharField(max_length=50,default="ESP1",)
    machineDescription = models.CharField(max_length=200,)

class Customer(models.Model):
    customerTag= models.CharField(max_length=50,) 
    customerName = models.CharField(max_length=50,)
    mainContact = models.CharField(max_length=100,default='',)
    Address = models.CharField(max_length=100,default='',)
    city = models.CharField(max_length=100,default='',)
    website = models.URLField(max_length=100,default='',)
    phone = models.IntegerField(default=0,)

    def __str__(self):
        return self.customerName
from django.db import models
from django.conf import settings
from django.contrib.auth import get_user_model


class Data(models.Model):
    author = models.ForeignKey(get_user_model(),on_delete=models.CASCADE,)
    tempData= models.CharField(max_length=50,blank=True,)
    humidData= models.CharField(max_length=50,blank=True,)


def __str__(self):
    return str(self.author)

如果我理解正确的话,我想您是在寻找筛选器查询的key__字段参数。所以在你的情况下,会是这样的

Data.objects.filter(author__customer_tag='tag-you-are-looking-for')   # double underscores after author

希望这能回答你的问题

如果我理解正确,我想您是在寻找筛选器查询的key__字段参数。所以在你的情况下,会是这样的

Data.objects.filter(author__customer_tag='tag-you-are-looking-for')   # double underscores after author
希望这能回答你的问题

都在文档中:

相关模型的字段在过滤器中使用双下划线进行查询

在您的情况下,您需要重写
DataListView
类的
get\u queryset
方法以返回过滤后的queryset:

class DataListView(LoginRequiredMixin,ListView):
...
def get_queryset(self):
    return self.queryset.filter(author__customerTag=self.request.user.customerTag)
都在文档中:

相关模型的字段在过滤器中使用双下划线进行查询

在您的情况下,您需要重写
DataListView
类的
get\u queryset
方法以返回过滤后的queryset:

class DataListView(LoginRequiredMixin,ListView):
...
def get_queryset(self):
    return self.queryset.filter(author__customerTag=self.request.user.customerTag)

谢谢你,我做到了!我刚刚将最后一行改为:return Data.objects.filter(author\u customer\u Tag=self.request.user.customer\u Tag),非常感谢您这么做!我刚刚将最后一行更改为:return Data.objects.filter(author\u customer\u Tag=self.request.user.customer\u Tag)