2

問題は、CIDR形式のデータを受け入れてデータベース(Postgres)に入れることができるはずのDjango Adminプロジェクトに取り組んでいることです。

モデルがあるとしましょう:

##################################################
class CIDR(models.Model):
    ....
    net_cidr = models.IPAddressField(unique=True)
    ....

    def __unicode__(self):
        return self.net_cidr

##################################################

上記のコードに基づいてnet_cidr、データベースのフィールドは CIDR 形式のデータをサポートする inet タイプです。ただし、IPAddressFieldCIDR はサポートしていません (少なくとも私には機能しません)。管理サイトに「128.66.0.0/16」などの何かを入力したい場合、Django はエラーを表示し、「有効な IPv4 アドレスを入力してください」と通知します。

フィールド タイプを Char に変更しようとしましたが、(もちろん) 動作します。ただし、データベースで CIDR を varchar として設定することはお勧めできません。

基本的に私が望むのはnet_cidr、「128.66.0.0-128.66.255.255」またはCIDRブロック「128.66.0.0/16」のようなIP範囲を受け入れて、「128.66.0.0/16」としてデータベースに保存できるようにすることです.

IPAddressField重要な部分は、文字列型 (IP 範囲や CIDR ブロックなど) のデータを受け入れる方法だと思います。次に、それを CIDR ブロックに変換してデータベースに保存できます。

4

1 に答える 1

1

必要なものを達成する方法はたくさんあります。

私がすることは、net_cidrとして定義することmodels.CharFieldです。

次に、関数を実装するモデルのモデルフォームを定義しますclean_net_cidr

class CIDRForm(ModelForm):
    def clean_net_cidr(self):
        # do your magic processing here

    class Meta:
        model = CIDR

次に、そのフォームをモデル管理オブジェクトに渡します

class CIDRAdmin(admin.ModelAdmin):
    form = CIDRForm

アップデート:

あなたのコメントに基づいて、これはまさにあなたが必要としているもののようです。 https://github.com/jimfunk/django-postgresql-netfields

他の分野の中でも、CidrAddressField

于 2013-01-30T21:39:27.363 に答える