django-strawberry

Additional fields for(ever) Django.

PyPI Version Supported Python versions Build Status Documentation Status GPL-2.0-only OR LGPL-2.1-or-later Coverage

Prerequisites

  • Django 1.11, 2.0, 2.1, 2.2 and 3.0.
  • Python 2.7, 3.6, 3.7 and 3.8.

Documentation

Documentation is available on Read the Docs.

Installation

  1. Install latest stable version from PyPI:

    pip install django-strawberry
    

    or latest stable version from GitHub:

    pip install https://github.com/barseghyanartur/django-strawberry/archive/stable.tar.gz
    

    or latest stable version from BitBucket:

    pip install https://bitbucket.org/barseghyanartur/django-strawberry/get/stable.tar.gz
    

Usage

MD5 field

In case you want to have an MD5 field populated from another field of the same model.

Example 1

myapp/models.py

from django.db import models
from strawberry.fields import MD5Field

class MyModel(models.Model):

    title = models.CharField(max_length=255)
    title_hash = MD5Field(
        populate_from='title',
        null=True,
        blank=True
    )

    def __str__(self):
        return self.title

myapp/example.py

from myapp.models import MyModel

mymodel = MyModel.objects.create(title="Lorem7")
print(mymodel.title_hash)
'd48a712e77902d0558a3721d9a4740c9'

Example 2

The populate_from argument can also be a callable, that would expect the model instance as an argument. Thus, example identical to the first one would be:

myapp/models.py

from django.db import models
from strawberry.fields import MD5Field


def strip_title(instance):
    return instance.title.strip()


class MyModel(models.Model):

    title = models.CharField(max_length=255)
    title_hash = MD5Field(
        populate_from=strip_title,
        null=True,
        blank=True,
    )

    def __str__(self):
        return self.title

myapp/example.py

from myapp.models import MyModel

mymodel = MyModel.objects.create(title=" Lorem7 ")
print(mymodel.title_hash)
'd48a712e77902d0558a3721d9a4740c9'

Testing

Project is covered with tests.

To test with all supported Python/Django versions type:

tox

To test against specific environment, type:

tox -e py38-django30

To test just your working environment type:

./runtests.py

To run a single test in your working environment type:

./runtests.py src/strawberry/tests/test_fields.py

Or:

./manage.py test strawberry.tests.test_fields

It’s assumed that you have all the requirements installed. If not, first install the test requirements:

pip install -r examples/requirements/test.txt

Writing documentation

Keep the following hierarchy.

=====
title
=====

header
======

sub-header
----------

sub-sub-header
~~~~~~~~~~~~~~

sub-sub-sub-header
^^^^^^^^^^^^^^^^^^

sub-sub-sub-sub-header
++++++++++++++++++++++

sub-sub-sub-sub-sub-header
**************************

License

GPL-2.0-only OR LGPL-2.1-or-later

Support

For any issues contact me at the e-mail given in the Author section.

Project documentation

Contents:

Release history and notes

Sequence based identifiers are used for versioning (schema follows below):

major.minor[.revision]
  • It’s always safe to upgrade within the same minor version (for example, from 0.3 to 0.3.4).
  • Minor version changes might be backwards incompatible. Read the release notes carefully before upgrading (for example, when upgrading from 0.3.4 to 0.4).
  • All backwards incompatible changes are mentioned in this document.

0.1.2

2019-12-28

  • Drop Support for Django versions earlier than 1.11.
  • Tested against Python 3.7 and 3.8.
  • Tested against Django 2.1, 2.2 and 3.0.
  • Upgrade test suite.

0.1.1

2018-05-20

Note

Release supported by Teamable - an employee referral and diversity hiring platform

  • Make it possible to auto-strip the whitespace from populated_from value.
  • More tests.

0.1

2018-05-20

Note

Release supported by Teamable - an employee referral and diversity hiring platform

  • Initial beta release.