首页
/ Django SortedM2M 技术文档

Django SortedM2M 技术文档

2024-12-20 09:55:30作者:凤尚柏Louis

1. 安装指南

安装依赖

django-sortedm2m 支持 Python 3.6 及以上版本,并且兼容多个 Django 版本。请确保你的开发环境满足以下要求:

  • Python 3.6 或更高版本
  • Django 2.2 或更高版本

安装步骤

你可以通过 pip 来安装 django-sortedm2m

pip install django-sortedm2m

安装完成后,确保在 Django 项目的 INSTALLED_APPS 中添加 sortedm2m

INSTALLED_APPS = [
    ...
    'sortedm2m',
    ...
]

2. 项目的使用说明

使用场景

django-sortedm2m 是一个用于替换 Django 自带的 ManyToManyField 的字段,它允许你在多对多关系中保持添加关系的顺序。

例如,假设你有一个画廊模型和一个照片模型,通常你会希望在这两个模型之间建立多对多关系,以便可以将多张照片添加到一个画廊中,同时也可以将同一张照片添加到多个画廊中。然而,Django 默认的多对多关系不提供排序功能,这通常会导致照片在画廊中随机排序。

通过使用 SortedManyToManyField,你可以轻松解决这个问题,保持照片在画廊中的顺序。

示例代码

以下是一个简单的示例,展示了如何在模型中使用 SortedManyToManyField

from django.db import models
from sortedm2m.fields import SortedManyToManyField

class Photo(models.Model):
    name = models.CharField(max_length=50)
    image = models.ImageField(upload_to='photos/')

class Gallery(models.Model):
    name = models.CharField(max_length=50)
    photos = SortedManyToManyField(Photo)

在这个例子中,Gallery 模型中的 photos 字段是一个 SortedManyToManyField,它将保持添加照片的顺序。

3. 项目API使用文档

SortedManyToManyField 参数

sorted

  • 默认值: True
  • 说明: 如果设置为 FalseSortedManyToManyField 将表现得像 Django 的原始 ManyToManyField,不会进行排序。

sort_value_field_name

  • 默认值: 'sort_value'
  • 说明: 指定中间表中用于排序的字段名称。你可以根据需要更改此名称。

base_class

  • 默认值: None
  • 说明: 你可以设置 base_class,它是排序多对多关系中间模型的基类。你可以使用它来添加额外的字段或方法。

迁移 ManyToManyFieldSortedManyToManyField

如果你已经有一个 ManyToManyField,并希望将其迁移为 SortedManyToManyField,可以按照以下步骤操作:

  1. 在模型中将 ManyToManyField 替换为 SortedManyToManyField
  2. 运行 python manage.py makemigrations 生成迁移文件。
  3. 编辑生成的迁移文件,将 migrations.AlterField 替换为 sortedm2m.operations.AlterSortedManyToManyField
  4. 运行 python manage.py migrate 应用迁移。

4. 项目安装方式

通过 pip 安装

最简单的安装方式是通过 pip

pip install django-sortedm2m

手动安装

你也可以从 GitHub 下载源代码并手动安装:

git clone https://github.com/jazzband/django-sortedm2m.git
cd django-sortedm2m
python setup.py install

安装完成后,确保在 Django 项目的 INSTALLED_APPS 中添加 sortedm2m

5. 管理界面中的使用

在 Django Admin 中使用

SortedManyToManyField 提供了一个自定义的拖拽排序小部件,可以在 Django Admin 中使用。要启用此功能,请确保在 INSTALLED_APPS 中添加 sortedm2m,并在 ModelAdmin 中避免使用 filter_horizontalfilter_vertical

from django.contrib import admin

class GalleryAdmin(admin.ModelAdmin):
    raw_id_fields = ('photos',)

这样,你就可以在 Django Admin 中通过拖拽来排序多对多关系中的项目。

6. 贡献指南

django-sortedm2m 是一个开源项目,欢迎贡献代码。你可以通过以下步骤参与开发:

  1. 克隆仓库:
    git clone https://github.com/jazzband/django-sortedm2m.git
    
  2. 安装开发依赖:
    pip install -r requirements-dev.txt
    
  3. 运行测试:
    tox
    

请遵循 Jazzband 的贡献指南和行为准则。

7. 代码质量

该项目使用 isortpycodestylepylint 来管理代码质量。你可以通过以下命令运行代码质量检查:

tox -e quality

通过以上文档,你应该能够顺利安装和使用 django-sortedm2m,并在 Django 项目中实现多对多关系的排序功能。

登录后查看全文
热门项目推荐
相关项目推荐

项目优选

收起
docsdocs
暂无描述
Markdown
843
5.6 K
kernelkernel
openEuler内核是openEuler操作系统的核心,既是系统性能与稳定性的基石,也是连接处理器、设备与服务的桥梁。
C
506
532
ops-transformerops-transformer
本项目是CANN提供的transformer类大模型算子库,实现网络在NPU上加速计算。
C++
1.02 K
2.4 K
pytorchpytorch
作为 Ascend for PyTorch 社区的核心组件,TorchNPU 是昇腾专为 PyTorch 打造的深度学习适配插件,使 PyTorch 框架能够直接调用昇腾 NPU,为开发者提供昇腾 AI 处理器的超强算力。
Python
826
1.24 K
kernelkernel
deepin linux kernel
C
33
16
ops-nnops-nn
本项目是CANN提供的神经网络类计算算子库,实现网络在NPU上加速计算。
C++
830
1.63 K
AscendNPU-IRAscendNPU-IR
AscendNPU-IR是基于MLIR(Multi-Level Intermediate Representation)构建的,面向昇腾亲和算子编译时使用的中间表示,提供昇腾完备表达能力,通过编译优化提升昇腾AI处理器计算效率,支持通过生态框架使能昇腾AI处理器与深度调优
C++
494
331
ops-mathops-math
本项目是CANN提供的数学类基础计算算子库,实现网络在NPU上加速计算。
C++
1.24 K
1.34 K
jiuwenswarmjiuwenswarm
JiuwenSwarm 是一款基于openJiuwen开发的智能AI Agent,它能够将大语言模型的强大能力,通过你日常使用的各类通讯应用,直接延伸至你的指尖。
Python
3.14 K
828
cann-learning-hubcann-learning-hub
CANN 学习中心仓,支持在线互动运行、边学边练,提供教程、示例与优化方案,一站式助力昇腾开发者快速上手。
Jupyter Notebook
728
361