Skip to main content

Django Model Fields that are smart.

Project description

Travis-CI Tests Coverage Code Health Downloads Documentation Status

Django Model Fields that are smart.

This app introduces a declarative way of handling fields’ values. It can be especially useful when one field depends on a value from another field, even if a field depends on itself. At first it might sound useless, but, as it turns out, it is an amazing concept that helps in writing clear, concise and DRY code.

Best way to descibe is on a simple example. Let’s say there is a field where you store a custom html page and you would like to have another field attached to the same model store the same page but with html tags stripped out, moreover you would like it to update whenever the first field changes it’s value. A common way to handle that issue is to overwrite model’s save method and put all the logic there, right? What if you could just give a field a function that does the stripping and everything else is taking care of? Wouldn’t that be nice, huh? Well, that’s one of many things this app let’s you do.

Another great example is django’s ImageField that can update width_field and height_field whenever image is changed. This app uses similar concepts to achive that functionality. But here is a more powerful example that demonstrates the value of this app. Let’s say you would like to have a user be able to upload an image in any format and automatically add another version of this image converted to JPEG and shrunk to fit in a box size of 1024x768. Here is how it could look with utilization of django-smartfields:

from django.db import models

from smartfields import fields
from smartfields.dependencies import FileDependency
from smartfields.processors import ImageProcessor

class User(models.Model):
    # ... more fields ....
    avatar = fields.ImageField(upload_to='avatar', dependencies=[
        attname='avatar_jpeg', FileDependency(processor=ImageProcessor(
            format='JPEG', scale={'max_width': 1024, 'max_height': 768})),
    ])
    avatar_jpeg = fields.ImageField(upload_to='avatar')
    # ... more fields ...

That’s it. Did I mention that it will also clean up old files, when new ones are uploaded?

So hopefully I got you convinced to give this app a try. There is full documentation also on the way, but for now you can check out ‘tests’ folder for some examples.

Dependencies

  • Django (for now only version >= 1.7, will add support for earlier versions later).

  • Python Pillow - (optional) used for image conversion/resizing.

  • ffmpeg - (optional) for video conversion. (could be easily adopted for libav).

  • BeautifulSoup4 - (optional) for HTML stripping

  • django-crispy-forms - (optional) for ajax uploading.

  • Plupload - (optional) for ajax uploading.

Changelog

1.0.0

  • Initial release

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-smartfields-1.0.0.tar.gz (38.2 kB view details)

Uploaded Source

Built Distribution

django_smartfields-1.0.0-py2.py3-none-any.whl (41.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file django-smartfields-1.0.0.tar.gz.

File metadata

File hashes

Hashes for django-smartfields-1.0.0.tar.gz
Algorithm Hash digest
SHA256 f1cb77a6b6b9a2ea1f08efb436bc7678c99232ba030e77ee214a4642c3b761be
MD5 17146bdfbbcfdef909fba0b16ac7a274
BLAKE2b-256 b498e0103059ce5aa45c9a2cecca697c1ceb60171c8e00ada69c6e809235e4d3

See more details on using hashes here.

File details

Details for the file django_smartfields-1.0.0-py2.py3-none-any.whl.

File metadata

File hashes

Hashes for django_smartfields-1.0.0-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 103e5286990f219eaf9a15f1f27eb8b81587456c676d67bd1ca2e828909c8bac
MD5 aaeaa4274da14bd3846ba422532afadf
BLAKE2b-256 eaf3c5a6ef2df0b5f38cb91381c5c4ddc23f1ad1d6f2cc61957e36182f8091f6

See more details on using hashes here.

Supported by

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