Skip to content

Latest commit

 

History

History
77 lines (45 loc) · 1.83 KB

README.rst

File metadata and controls

77 lines (45 loc) · 1.83 KB

django-cidrfield

cidrfield provides a model field for django that allows the storage of an ip network on the db side by using ipaddress to handle conversion to an ipaddress.ip_network instance (or None) on the python side. It supports the use of __contains and __in to query the IP network that contain and belong to.

Installation

Add this to your django project by installing with pip:

pip install django-cidrfield

Usage

In your models, do something like the following:

from django.db import models
from cidrfield.models import IPNetworkField

class MyModel(models.Model):

    # the regular params should work well enough here
    ip_network = IPNetworkField()
    # ... and so on

Then you can store a ip network like the following:

MyModel(ip_network='192.168.1.0/24').save()

And you can query a ip network like the following:

MyModel.objects.filter(ip_network='192.168.1.0/24')
MyModel.objects.filter(ip_network__contains='192.168.1.1')
MyModel.objects.filter(ip_network__in='192.168.0.0/16')
MyModel.objects.filter(ip_network__in=['192.168.0.0/16', '10.10.0.0/16'])

If you use DjangoQL, you can use CIDRQLSchema like the following:

from django.contrib import admin
from djangoql.admin import DjangoQLSearchMixin
from cidrfield.schemas import CIDRQLSchema
from .models import MyModel


@admin.register(MyModel)
class MyModelAdmin(DjangoQLSearchMixin, admin.ModelAdmin):
    list_display = ['ip_network']
    search_fields = ('ip_network', )
    djangoql_schema = CIDRQLSchema

Changelog

0.2.0

  • Add support for Djangoql.
  • Fixed the bug about __in query not supporting array.