多个 QuerySet 到另一个模型

Posted

技术标签:

【中文标题】多个 QuerySet 到另一个模型【英文标题】:Multiple QuerySet to another Model 【发布时间】:2021-07-03 05:14:16 【问题描述】:

我正在编写以下代码来使用 Django ninja 框架搜索配置文件模型中的类别,如果我只检索配置文件中的字段,则所有查询返回,但是当我需要从用户模型中获取用户名时,只返回一条记录从循环中。

profile.py

class Profile(models.Model):
    SERVICEPROVIDER = 'service_provider'
    CUSTOMER = 'customer'
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='profile')
    conf_password = models.CharField(max_length= 124)
    category =  models.CharField(max_length= 80, blank=True, null=True)
    click = models.IntegerField(blank=True, default=0)
    date_clicked = models.DateTimeField(auto_now_add=True, blank=True,null=True)
    image_path = models.ImageField(upload_to='user_uploads/', blank=True)
    role = models.CharField(max_length=100, choices=[
        (SERVICEPROVIDER, SERVICEPROVIDER),
        (CUSTOMER, CUSTOMER),])
    
    profile_info = models.JSONField(blank=True, null=True)

    def __str__(self):
        return f'self.user.username'

auth.py

@auth.get("/search/category", auth=None, response=200: searchSchemaout, 404: MessageOut)
def search(request, category:str):
    profile = Profile.objects.filter(category__icontains=category).values()
    for i in range(len(profile)):
        user = get_object_or_404(User,id=profile[i]['id'])
        return 200, 
            "user": user,
            "profile": profile[i]
        

auth.py 架构

class UserSchemaOut(Schema):
    username: str
    
class profileSchemaout(Schema):
    role: str
    category: str  

class searchSchemaout(Schema): 
    user: UserSchemaOut
    profile: profileSchemaout

结果:


  "user": 
    "username": "ahmed"
  ,
  "profile": 
    "role": "service_provider",
    "category": "doors"
  

【问题讨论】:

【参考方案1】:

我找到了解决方案,也许它可以帮助某人

@offices.get("/category/user_id", auth=None, response=200: List[searchSchemaout], 404: MessageOut)
def category(request, category:str):
    
    cat_qs = Profile.objects.all().filter(category__icontains=category)
    if cat_qs:
        return cat_qs
    else:
       return 404, 'message': 'This category not found.' 
    

架构:

class UserSchemaOut(Schema):
    pk: int
    username: str
    
class searchSchemaout(Schema): 
    user: UserSchemaOut
    category: str 
    image_path : str 
    role: str
    address: str

【讨论】:

以上是关于多个 QuerySet 到另一个模型的主要内容,如果未能解决你的问题,请参考以下文章

Django 2021年最新版教程21数据库查询 model 多条数据 queryse转dict字典 返回渲染到前端

如何让用户关联到另一个模型 DRF。 ValueError:精确查找的 QuerySet 值必须使用切片限制为一个结果

Django QuerySet 包含重复的条目

NoReverseMatch at ...... in django

ORM多表操作(object与queryset)

django模型系统二