2016-10-16 9 views
0

ユーザがカスタムプロパティを定義できるようにしたい。djangoのユーザ定義フィールドモデル

それぞれの顧客が異なる方法でアパートメントを管理するように管理マンションです。 私はアパートのためにいくつかのカスタムプロパティを定義できるようにします。

class Unit(CommonInfo): 
    version = IntegerVersionField() 
    number = models.CharField(max_length=30,null=True, blank=True) 
    max_occupants = models.PositiveSmallIntegerField() 
    floor = models.PositiveSmallIntegerField() 
    rooms = models.PositiveSmallIntegerField() 
    is_disabled_access = models.BooleanField(default=False) 
    balcony_quantity = models.PositiveSmallIntegerField() 
    building = models.ForeignKey(Building) 
    recomended_price = models.DecimalField(max_digits=7, decimal_places=2) 

私は、このモデルに追加フィールドを追加できるようにしたいと考えています。 例 - is_breaker is_fuse Number_of

私は、必要なデータを予測できないため、

どうすればいいですか?

+0

モデルの変更ごとに、あなたの変更がデータベースで有効になるようにするには、 'python manage.py makemigrations'と' python manage.py migrate'を実行する必要があります。これは、ここでリレーショナルデータベースで望むことができないことを意味します。代わりに、NoSQLデータベースを見て、データベーススキーマの柔軟性という点で提供するものを利用する必要があります。 @ettananyが指摘している理由から、 – ettanany

+0

が動作しません。しかし、私はNoSQLでそれを解決しません(残りのデータはかなりリレーショナルであると仮定します)。人々が任意のタグを行えるようにするタグ付けアプリケーションが数多くあります。または、それらを定義する場合は、「属性」モデルに多対多フィールドを使用します。 –

+0

postgresを使用すると、余分なフィールドをJSONFieldに保存できます。または、ユーザー単位フィールド値のプロパティー表を作成してそこに保管することもできます。後でこれらのフィールドを使って何を行うかによって異なります(ストアまたはストアとクエリのみ) – serg

答えて

1

私は、次の解決策reccomendになります、あなたのユニットのモデル2.To

class Property(models.Model): 
    property = models.CharField(max_length=140) 
    value = models.CharField(max_length=140) 

    def __str__(self): 
     return self.property 

プロパティモデルで多対多のフィールドを追加します: "プロパティ" モデル

1.Createを

class Unit(models.Model): 
    (...) 
    properties = models.ManyToManyField(Property) 

3.管理者のインラインを追加して、さまざまなプロパティを表示します。

class Unit(admin.ModelAdmin): 
    fields = ('__all__') 
    inlines = ('properties') 
+0

申し訳ありませんが、プロジェクトからコードをコピーして、今修正しました:) – idik

+0

ありがとうございます。しかし、どのように私はそれを使用することができます。これらのプロパティでソート、フィルタリング、または検索することはできますか?一般的なアイデアを伝えるためにスニペットやリンクを投稿できますか? –