首页
/ Django SortedM2M 技术文档

Django SortedM2M 技术文档

2024-12-17 00:40:50作者:凤尚柏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 项目中实现多对多关系的排序功能。

热门项目推荐
相关项目推荐

项目优选

收起
Python-100-DaysPython-100-Days
Python - 100天从新手到大师
Python
609
115
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
286
79
mdmd
✍ WeChat Markdown Editor | 一款高度简洁的微信 Markdown 编辑器:支持 Markdown 语法、色盘取色、多图上传、一键下载文档、自定义 CSS 样式、一键重置等特性
Vue
111
25
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
60
48
RuoYi-Cloud-Vue3RuoYi-Cloud-Vue3
🎉 基于Spring Boot、Spring Cloud & Alibaba、Vue3 & Vite、Element Plus的分布式前后端分离微服务架构权限管理系统
Vue
45
29
go-stockgo-stock
🦄🦄🦄AI赋能股票分析:自选股行情获取,成本盈亏展示,涨跌报警推送,市场整体/个股情绪分析,K线技术指标分析等。数据全部保留在本地。支持DeepSeek,OpenAI, Ollama,LMStudio,AnythingLLM,硅基流动,火山方舟,阿里云百炼等平台或模型。
Go
1
0
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
205
57
MateChatMateChat
前端智能化场景解决方案UI库,轻松构建你的AI应用,我们将持续完善更新,欢迎你的使用与建议。 官网地址:https://matechat.gitcode.com
184
34
RuoYi-VueRuoYi-Vue
🎉 基于SpringBoot,Spring Security,JWT,Vue & Element 的前后端分离权限管理系统,同时提供了 Vue3 的版本
Java
182
44
frogfrog
这是一个人工生命试验项目,最终目标是创建“有自我意识表现”的模拟生命体。
Java
8
0