Skip to main content

A model used for curating other models and proxying their attributes

Project description

https://travis-ci.org/theatlantic/django-curation.svg?branch=master

django-curation is a django module that provides a model used for curating other model objects and proxying their attributes.

Example

from django.db import models

from curation.models import CuratedItem, CuratedGroup, CuratedItemManager
from curation.fields import CuratedForeignKey

from blog.models import Post

class CuratedPostGroup(CuratedGroup):
    pass

class CuratedPost(CuratedItem):
    formfield_overrides = {
        'custom_title': 'title',
    }
    objects = CuratedItemManager()

    group = models.ForeignKey(CuratedPostGroup, on_delete=models.CASCADE)
    post = curation.fields.CuratedForeignKey(Post)
    custom_title = models.CharField(max_length=255, null=True, blank=True,
        db_column='title')

Testing

tox

Setup:

python3 -m venv venv
. venv/bin/activate
pip install tox

Run all tests:

tox

Run code coverage and render HTML report:

tox -e cov
open htmlcov/index.html

pytest

Setup:

python3 -m venv venv
. venv/bin/activate
pip install pytest pytest-cov pytest-django "Django<2.1"
pip install -e .

Run tests:

python -m pytest

Run code coverage and render HTML report:

python -m pytest --cov-report html --cov-report term --cov=curation

Internals

curation.models.CuratedItem

Abstract class representing an item in a curated group.

In order for a model that extends this class to proxy successfully, it must define a CuratedForeignKey field:

class CuratedPost(CuratedItem):
    post = curation.fields.CuratedForeignKey(Post)

field_overrides = {}

A dict that maps field names in the proxy model (the to=… model in the CuratedForeignKey) to field names in the current model which can override them (provided their value is not None or an empty string).

This takes the form:

field_overrides = {
     'title': 'custom_title',
     'status': 'custom_status',
}

Where custom_title and custom_status are fields in the model extending CuratedItem, and title and status are fields in the proxy model.

primary_id = models.AutoField(primary_key=True, db_column='id')

Custom primary key to prevent conflicts with the proxy model’s primary key.

curation.models.CuratedItemManager

A manager that defines queryset helpers for CuratedItem.

group(<slug>)

Filter the current queryset to rows with curated groups having slug “slug”.

curation.base.CuratedItemModelBase

Overrides ModelBase to check whether a curation.fields.CuratedForeignKey is defined on the model. If not, throw a TypeError.

curation.fields.CuratedForeignKey

A ForeignKey that gets a list of the __dict__ keys and field names of the related model on load. It saves this list to the _proxy_attrs attribute of its parent model’s _meta attribute.

contribute_to_class(<cls>, <name>)

A django built-in that adds attributes to the model class in which it is defined.

This method sets the _curated_proxy_field_name on the _meta attribute of the CuratedForeignKey’s parent model to the field’s name (e.g. “post” in the example at the very beginning of this README).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django_curation-2.1.0.tar.gz (27.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_curation-2.1.0-py2.py3-none-any.whl (29.6 kB view details)

Uploaded Python 2Python 3

File details

Details for the file django_curation-2.1.0.tar.gz.

File metadata

  • Download URL: django_curation-2.1.0.tar.gz
  • Upload date:
  • Size: 27.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.5

File hashes

Hashes for django_curation-2.1.0.tar.gz
Algorithm Hash digest
SHA256 a4b3813f0deefa1af96158c072263d32bd80df1f2ccfa47b29591bbe92dbaa47
MD5 6b995cc27e4891245e8da52134b7f3cf
BLAKE2b-256 3ecdf99e5c1f545c392ee4a5b5186a6d8b996455c1368ddebcdfd82962b5fc67

See more details on using hashes here.

File details

Details for the file django_curation-2.1.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_curation-2.1.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 7692cd58404ccf999f6ec22e9aab59857a16ecdb01e138c4c17a6f7e22f3b011
MD5 e12a775c03720050c4694a919332e1e4
BLAKE2b-256 b8e8b3461879fbc12cea76be7907a8a765ac7290d1b44e4a001cfe3f67a1a6cf

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page