{"id":20689985,"url":"https://github.com/tj-django/django-clone","last_synced_at":"2025-05-15T20:01:36.180Z","repository":{"id":37860066,"uuid":"172541739","full_name":"tj-django/django-clone","owner":"tj-django","description":"Controlled Django model instance replication.","archived":false,"fork":false,"pushed_at":"2025-03-31T20:22:02.000Z","size":1743,"stargazers_count":124,"open_issues_count":9,"forks_count":25,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-04-01T03:30:33.467Z","etag":null,"topics":["bulk-cloning","clone","clonemixin-attributes","cloning","datamodels","django","django-admin","django-clone","django-model","django-model-clone","django-object-cloner","duplicate","duplicating-models","duplication","object-clone","python","replication"],"latest_commit_sha":null,"homepage":"https://tj-django.github.io/django-clone","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tj-django.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null},"funding":{"github":"jackton1","patreon":null,"open_collective":"tj-django","ko_fi":null,"tidelift":null,"community_bridge":null,"liberapay":null,"issuehunt":null,"otechie":null,"custom":[]}},"created_at":"2019-02-25T16:25:25.000Z","updated_at":"2025-03-24T19:45:34.000Z","dependencies_parsed_at":"2024-02-20T01:54:26.379Z","dependency_job_id":"bcc9dee5-6d28-4b8d-8bfa-0168fe26a459","html_url":"https://github.com/tj-django/django-clone","commit_stats":{"total_commits":1465,"total_committers":22,"mean_commits":66.5909090909091,"dds":0.5331058020477816,"last_synced_commit":"887516bf9e977c32f5b3589d00a2404d92d88567"},"previous_names":[],"tags_count":83,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-django%2Fdjango-clone","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-django%2Fdjango-clone/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-django%2Fdjango-clone/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tj-django%2Fdjango-clone/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tj-django","download_url":"https://codeload.github.com/tj-django/django-clone/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247773719,"owners_count":20993639,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bulk-cloning","clone","clonemixin-attributes","cloning","datamodels","django","django-admin","django-clone","django-model","django-model-clone","django-object-cloner","duplicate","duplicating-models","duplication","object-clone","python","replication"],"created_at":"2024-11-16T23:11:30.656Z","updated_at":"2025-04-08T04:11:50.771Z","avatar_url":"https://github.com/tj-django.png","language":"Python","funding_links":["https://github.com/sponsors/jackton1","https://opencollective.com/tj-django","https://www.buymeacoffee.com/jackton1"],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e \n    \u003cimg width=\"466\" alt=\"4FC889E9-FF59-4E44-9EB6-2AF7DC034C74\" src=\"https://user-images.githubusercontent.com/17484350/215616634-17439a58-7bd8-4e9c-989f-e6bef7c73e48.png\"\u003e\n\u003c/p\u003e\n\n|  Python   | Django  |  Downloads  |   Code Style   |\n|:---------:|:-------:|:-----------:|:--------------:|\n| [![PyPI - Python Version](https://img.shields.io/pypi/pyversions/django_clone.svg)](https://pypi.org/project/django-clone) | [![PyPI - Django Version](https://img.shields.io/pypi/djversions/django_clone.svg)](https://docs.djangoproject.com/en/dev/releases/) | [![Downloads](https://static.pepy.tech/badge/django-clone)](https://pepy.tech/project/django-clone) | [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) |\n\n|    PyPI         | Test | Vulnerabilities | Coverage | Code Quality  |  Pre-Commit   |\n|:---------------:|:----:|:---------------:|:--------:|:-------------:|:-------------:|\n| [![PyPI version](https://badge.fury.io/py/django-clone.svg)](https://badge.fury.io/py/django-clone) | [![Test](https://github.com/tj-django/django-clone/workflows/Test/badge.svg)](https://github.com/tj-django/django-clone/actions?query=workflow%3ATest) | [![Known Vulnerabilities](https://snyk.io/test/github/tj-django/django-clone/badge.svg?targetFile=requirements.txt)](https://snyk.io/test/github/tj-django/django-clone?targetFile=requirements.txt) | [![Codacy Badge](https://app.codacy.com/project/badge/Coverage/b33dd02dbb034d7fa9886a99f5383ea6)](https://www.codacy.com/gh/tj-django/django-clone?utm_source=github.com\\\u0026utm_medium=referral\\\u0026utm_content=tj-django/django-clone\\\u0026utm_campaign=Badge_Coverage) \u003cbr/\u003e [![codecov](https://codecov.io/gh/tj-django/django-clone/branch/main/graph/badge.svg?token=2NE21Oe50Q)](https://codecov.io/gh/tj-django/django-clone)| [![Codacy Badge](https://app.codacy.com/project/badge/Grade/b33dd02dbb034d7fa9886a99f5383ea6)](https://www.codacy.com/gh/tj-django/django-clone?utm_source=github.com\\\u0026utm_medium=referral\\\u0026utm_content=tj-django/django-clone\\\u0026utm_campaign=Badge_Grade) |  [![pre-commit.ci status](https://results.pre-commit.ci/badge/github/tj-django/django-clone/main.svg)](https://results.pre-commit.ci/latest/github/tj-django/django-clone/main) |\n\n## django-clone\n\nCreate copies of a model instance with explicit control on how the instance should be duplicated (limiting fields or related objects copied) with unique field detection.\n\nThis solves the problem introduced by using `instance.pk = None` and `instance.save()` which results in copying more object state than required.\n\n## Features\n\n*   100% test coverage.\n*   More control over how a model instance should be duplicated\n*   Multi Database support i.e Create duplicates on one or more databases.\n*   Restrict fields used for creating a duplicate instance.\n*   Detects unique fields and naively adds a suffix `copy {count}` to each duplicate instance (for supported fields only).\n*   Optionally differentiate between a duplicate instance and the original by appending a **copy** suffix to non unique fields (for supported fields only).\n\n## Table of Contents\n\n*   [Installation](#installation)\n    *   [pip](#pip)\n    *   [poetry](#poetry)\n*   [Usage](#usage)\n    *   [Subclassing the `CloneModel`](#subclassing-the-clonemodel)\n    *   [Using the `CloneMixin`](#using-the-clonemixin)\n    *   [Using the `CloneModel`](#using-the-clonemodel)\n    *   [Duplicating a model instance](#duplicating-a-model-instance)\n    *   [Bulk cloning a model](#bulk-cloning-a-model)\n    *   [Creating clones without subclassing `CloneMixin`.](#creating-clones-without-subclassing-clonemixin)\n    *   [CloneMixin attributes](#clonemixin-attributes)\n        *   [Explicit (include only these fields)](#explicit-include-only-these-fields)\n        *   [Implicit (include all except these fields)](#implicit-include-all-except-these-fields)\n    *   [Django Admin](#django-admin)\n        *   [Duplicating Models from the Django Admin view.](#duplicating-models-from-the-django-admin-view)\n            *   [List View](#list-view)\n            *   [Change View](#change-view)\n        *   [CloneModelAdmin class attributes](#clonemodeladmin-class-attributes)\n*   [Advanced Usage](#advanced-usage)\n    *   [Signals](#signals)\n        *   [`pre_clone_save`, `post_clone_save`](#pre_clone_save-post_clone_save)\n    *   [Multi-database support](#multi-database-support)\n*   [Compatibility](#compatibility)\n*   [Running locally](#running-locally)\n*   [Found a Bug?](#found-a-bug)\n*   [Contributors ✨](#contributors-)\n\n## Installation\n\n### pip\n\n```bash\npip install django-clone\n```\n\n### poetry\n\n```bash\npoetry add django-clone\n```\n\n## Usage\n\n### Subclassing the `CloneModel`\n\n![](https://user-images.githubusercontent.com/17484350/221387430-efd5508a-2597-4320-9750-5a4c56833edb.png)\n\n### Using the `CloneMixin`\n\n![](https://user-images.githubusercontent.com/17484350/221387397-6ad5475b-6887-4a5f-b6d3-42784f9dfa7c.png)\n\n### Using the `CloneModel`\n\n![](https://user-images.githubusercontent.com/17484350/221387226-572cedbe-e30e-456d-af75-bcd25edec754.png)\n\n### Duplicating a model instance\n\n![](https://user-images.githubusercontent.com/17484350/221386600-731a6f45-1704-4834-bcbe-0f57d912faf7.png)\n\n### Bulk cloning a model\n\n![](https://user-images.githubusercontent.com/17484350/221386555-13978280-35a1-4941-8186-a1c6723a0346.png)\n\n### Creating clones without subclassing `CloneMixin`.\n\n\u003e **NOTE:** :warning:\n\u003e\n\u003e *   This method won't copy over related objects like Many to Many/One to Many relationships.\n\u003e *   Ensure that required fields skipped from being cloned are passed in using the `attrs` kwargs.\n\n![](https://user-images.githubusercontent.com/17484350/221385171-add1a0c3-21fc-4c48-bfe9-4f2014ffe035.png)\n\n### CloneMixin attributes\n\n|    Attribute        |  Description |\n|:------------------------------:|:------------:|\n| `DUPLICATE_SUFFIX` | Suffix to append to duplicates \u003cbr\u003e (NOTE: This requires `USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS` \u003cbr\u003e to be enabled and supports string fields). |\n`USE_DUPLICATE_SUFFIX_FOR_NON_UNIQUE_FIELDS` | Enable appending the `DUPLICATE_SUFFIX` to new cloned instances. |\n`UNIQUE_DUPLICATE_SUFFIX` | Suffix to append to unique fields |\n`USE_UNIQUE_DUPLICATE_SUFFIX` | Enable appending the `UNIQUE_DUPLICATE_SUFFIX` to new cloned instances. |\n`MAX_UNIQUE_DUPLICATE_QUERY_ATTEMPTS` | The max query attempt while generating unique values for a case of unique conflicts. |\n\n#### Explicit (include only these fields)\n\n|    Attribute        |  Description |\n|:------------------------------:|:------------:|\n| `_clone_fields` | Restrict the list of fields to copy from the instance (By default: Copies all fields excluding auto-created/non editable model fields) |\n| `_clone_m2m_fields` | Restricted Many to many fields (i.e Test.tags) |\n| `_clone_m2o_or_o2m_fields` | Restricted Many to One/One to Many fields |\n| `_clone_o2o_fields` | Restricted One to One fields |\n| `_clone_linked_m2m_fields` | Restricted Many to Many fields that should be linked to the new instance |\n\n#### Implicit (include all except these fields)\n\n|  Attribute  | Description |\n|:--------------------:|:-----------:|\n| `_clone_excluded_fields` | Excluded model fields. |\n`_clone_excluded_m2m_fields` | Excluded many to many fields. |\n`_clone_excluded_m2o_or_o2m_fields` |  Excluded Many to One/One to Many fields. |\n`_clone_excluded_o2o_fields` | Excluded one to one fields. |\n\n\u003e **NOTE:** :warning:\n\u003e\n\u003e *   Ensure to either set `_clone_excluded_*` or `_clone_*`. Using both would raise errors.\n\n### Django Admin\n\n#### Duplicating Models from the Django Admin view.\n\n![](https://user-images.githubusercontent.com/17484350/221386874-047989a4-ae4d-4d82-9ef6-2b303001a4c2.png)\n\n##### List View\n\n![Screenshot](Duplicate-action.png)\n\n##### Change View\n\n![Screenshot](Duplicate-button.png)\n\n#### CloneModelAdmin class attributes\n\n![](https://user-images.githubusercontent.com/17484350/221387085-e0ca31ee-8c4c-40d9-9ce6-44ff5e6814ff.png)\n\n\u003e **NOTE:** :warning:\n\u003e\n\u003e *   Ensure that `model_clone` is placed before `django.contrib.admin`\n\n```python\nINSTALLED_APPS = [\n    'model_clone',\n    'django.contrib.admin',\n    '...',\n]\n```\n\n## Advanced Usage\n\n### Signals\n\n#### `pre_clone_save`, `post_clone_save`\n\n![](https://user-images.githubusercontent.com/17484350/221387120-b5219cdb-9f74-4751-b593-2c68db9fd0e0.png)\n\n### Multi-database support\n\n![](https://user-images.githubusercontent.com/17484350/221385217-3a123080-b247-4ef0-b876-e75db1518c92.png)\n\n## Compatibility\n\n|  Python      |  Supported version |\n|--------------|--------------------|\n|  Python2.x   |    `\u003c=2.5.3`       |\n|  Python3.5   |    `\u003c=2.9.6`       |\n|  Python3.6+  |    `\u003c=5.3.3`       |\n|  Python3.7+  |    All versions    |\n\n|  Django      |   Supported version |\n|--------------|---------------------|\n|  1.11        |    `\u003c=2.7.2`        |\n|  2.x         |    All versions     |\n|  3.x         |    All versions     |\n|  4.x         |    All versions     |\n\n## Running locally\n\n```shell\n$ git clone git@github.com:tj-django/django-clone.git\n$ make default-user\n$ make run\n```\n\nSpins up a django server running the demo app.\n\nVisit http://127.0.0.1:8000\n\n## Found a Bug?\n\nTo file a bug or submit a patch, please head over to [django-clone on github](https://github.com/tj-django/django-clone/issues).\n\nIf you feel generous and want to show some extra appreciation:\n\nSupport me with a :star:\n\n[![Buy me a coffee][buymeacoffee-shield]][buymeacoffee]\n\n[buymeacoffee]: https://www.buymeacoffee.com/jackton1\n\n[buymeacoffee-shield]: https://www.buymeacoffee.com/assets/img/custom_images/orange_img.png\n\n## Contributors ✨\n\nThanks goes to these wonderful people:\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:START - Do not remove or modify this section --\u003e\n\n\u003c!-- prettier-ignore-start --\u003e\n\n\u003c!-- markdownlint-disable --\u003e\n\n\u003ctable\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://gerritneven.nl\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2500973?v=4?s=100\" width=\"100px;\" alt=\"Gerben Neven\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eGerben Neven\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3Agerbyzation\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=gerbyzation\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=gerbyzation\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"http://sebastian-kindt.com\"\u003e\u003cimg src=\"https://avatars1.githubusercontent.com/u/2536081?v=4?s=100\" width=\"100px;\" alt=\"Sebastian Kapunkt\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eSebastian Kapunkt\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=SebastianKapunkt\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3ASebastianKapunkt\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=SebastianKapunkt\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/andresp99999\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/1036725?v=4?s=100\" width=\"100px;\" alt=\"Andrés Portillo\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAndrés Portillo\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3Aandresp99999\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://renovate.whitesourcesoftware.com\"\u003e\u003cimg src=\"https://avatars0.githubusercontent.com/u/25180681?v=4?s=100\" width=\"100px;\" alt=\"WhiteSource Renovate\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eWhiteSource Renovate\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"#maintenance-renovate-bot\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/yuekui\"\u003e\u003cimg src=\"https://avatars2.githubusercontent.com/u/2561450?v=4?s=100\" width=\"100px;\" alt=\"Yuekui\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eYuekui\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=yuekui\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3Ayuekui\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=yuekui\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=yuekui\" title=\"Documentation\"\u003e📖\u003c/a\u003e \u003ca href=\"#maintenance-yuekui\" title=\"Maintenance\"\u003e🚧\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/diesieben07\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1915984?v=4?s=100\" width=\"100px;\" alt=\"Take Weiland\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eTake Weiland\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=diesieben07\" title=\"Tests\"\u003e⚠️\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3Adiesieben07\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=diesieben07\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/ptrck\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/1259703?v=4?s=100\" width=\"100px;\" alt=\"Patrick\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003ePatrick\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3Aptrck\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=ptrck\" title=\"Code\"\u003e💻\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/Akollek\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/5873158?v=4?s=100\" width=\"100px;\" alt=\"Amiel Kollek\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eAmiel Kollek\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=Akollek\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/issues?q=author%3AAkollek\" title=\"Bug reports\"\u003e🐛\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=Akollek\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://erictheise.com/\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/317680?v=4?s=100\" width=\"100px;\" alt=\"Eric Theise\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eEric Theise\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=erictheise\" title=\"Documentation\"\u003e📖\u003c/a\u003e\u003c/td\u003e\n      \u003ctd align=\"center\" valign=\"top\" width=\"14.28%\"\u003e\u003ca href=\"https://github.com/DanielSchaffer\"\u003e\u003cimg src=\"https://avatars.githubusercontent.com/u/334487?v=4?s=100\" width=\"100px;\" alt=\"Daniel Schaffer\"/\u003e\u003cbr /\u003e\u003csub\u003e\u003cb\u003eDaniel Schaffer\u003c/b\u003e\u003c/sub\u003e\u003c/a\u003e\u003cbr /\u003e\u003ca href=\"https://github.com/tj-django/django-clone/commits?author=DanielSchaffer\" title=\"Code\"\u003e💻\u003c/a\u003e \u003ca href=\"https://github.com/tj-django/django-clone/commits?author=DanielSchaffer\" title=\"Tests\"\u003e⚠️\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n\u003c!-- markdownlint-restore --\u003e\n\n\u003c!-- prettier-ignore-end --\u003e\n\n\u003c!-- ALL-CONTRIBUTORS-LIST:END --\u003e\n\nThis project follows the [all-contributors](https://github.com/all-contributors/all-contributors) specification. Contributions of any kind welcome!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj-django%2Fdjango-clone","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftj-django%2Fdjango-clone","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftj-django%2Fdjango-clone/lists"}