FUADMIN/ DIJANGO NINJA 跨表查询和模糊搜索

本人新手一个,下了框架FUADMIN,开始边学边干项目。

需要跨表查询,以及模糊查询,摸索折腾了好久终于搞定,发现NiNJA 有很强的解析能力,可以很容易实现跨表查询,以及模糊查询。 

有两个表:

class MachineBank(CoreModel):
    setup_date = models.DateField(verbose_name="安装日期")
    warranty_date = models.DateField(verbose_name="保修日期")
    # Django中跨app的model建立外键关系
    customer = models.ForeignKey('basic_data.Customer', on_delete=models.CASCADE) 
class Customer(CoreModel):
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)

API接口 中 FilterSchema 代码见下:

class Filters(FuFilters):
    machine_sn: str = Field(None, alias="machine_sn")
    machine_type: str = Field(None, alias="machine_type")
    customer_id_ _in: list = Field(None, alias="customer_ids[]")
    # customer_ _name: str = Field(None, alias="customer_name")
    customer__name_ _icontains: str = Field(None, alias="customer_name")

(注意:双下划线,为了让大家看清楚 _ _ ,中间加了一个空格,实际无空格__)

customer_id__in: 通过父表的ID字段查询

customer__name: 通过父表的name字段查询

customer__name_ _icontains:可以模糊查询

查询接口

@api.get("/", response=List[MachineBankOut])
@paginate(MyPagination)
def list_machines(request, filters: Filters = Query(...)):
    qs = retrieve(request, MachineBank, filters)
    return qs

接口完成:

可以实现外键字段查询,以及模糊查询

另外,关于模糊查询的方法,除了FilterSchema外,还可以自己写

class Filters(FuFilters):
    name: str = Field(None, min_length=1, description="模糊查询", alias="name")  

@api.get("/", response=List[CustomerOut])  # 通过name,可以运行的模糊查询
@paginate(MyPagination)
def list_customers(request, name: str = Query(None)):  # (request, name: str = Query(None), id: int = Query(None))
    # Query是查询参数,比如可以添加多个,ID是内置的,可以不
    qs = Customer.objects.all()
    if name:
        qs = qs.filter(name__icontains=name)  # Django 的object.filter
    return qs

  • 7
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Django是一个强大的Web开发框架,它提供了许多内置的功能和模块来简化和加速Web应用程序的开发过程。其中一个重要的功能是用户认证和登录系统。 Django提供了一个内置的登录模板,可以方便地添加到应用程序中。要使用Django的登录模板,首先需要在`urls.py`文件中添加登录视图的路径。 在`urls.py`中添加以下代码: ``` from django.contrib.auth.views import LoginView urlpatterns = [ ... path('login/', LoginView.as_view(), name='login'), ... ] ``` 然后,在`settings.py`中配置登录模板的路径。在模板设置部分,添加以下代码: ``` TEMPLATES = [ { ... 'DIRS': [os.path.join(BASE_DIR, 'templates')], ... }, ] ``` 在项目根目录下,创建一个名为`templates`的文件夹,并在该文件夹中创建一个名为`registration`的子文件夹。在`registration`文件夹中,创建一个名为`login.html`的模板文件。 模板文件`login.html`的内容如下: ```html {% extends 'base.html' %} {% block content %} <h2>用户登录</h2> <form method="post" action="{% url 'login' %}"> {% csrf_token %} {{ form.as_p }} <button type="submit">登录</button> </form> {% endblock %} ``` 这个模板文件即为登录页面的样式和布局。`form.as_p`将单渲染为p标签的形式。 最后,可以自定义一个基础的模板`base.html`,并在`login.html`中继承这个基础模板。在`base.html`中,可以包含网站的通用样式和布局。 配置完成后,通过访问`/login`路径,即可看到Django提供的默认登录页面。用户可以在该页面中输入用户名和密码进行登录。 以上就是使用Django登录模板的简要介绍。使用Django的登录模板,可以快速搭建起用户认证和登录系统,提高Web应用程序的开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值