Dynamiczne modele w Django

0

Czesc mam problem, Chcialem zrobic dynamiczne modele w Django i nie wiem jak sie za to zabrac

znalazlem cos takiego jak model EAV i myslalem czy nie dalo by sie tego uproscic, Co myslicie o takim modelu

0

Sory niechcayc kliknalem Enter :P

class Model(models.Model):
     nazwa = models.CharField(,,,)
     typ     =  models.CharField(choices=,,,)

class Field(models.Model):
    nazwa = models.CharField(,,,)
     typ     =  models.CharField(choices=,,,)
    wartosc = models.CharField()


class Schema(models.Model):
tu bede trzymal scheme mojego modelu wraz z polami do tworzenia nowych rekordow (zapamietane pola bez wartosci ktore bede ustawial)

Myslicie ze to jest dobre rozwiazanie?

0

Dobra..... glupota

Mialo to wygladac mniej wiecej tak

# -*- coding: utf-8 -*-
from __future__ import unicode_literals

from django.db import models

# Create your models here.
class Model(models.Model):
    user = models.ForeignKey(User)
    name = models.CharField(max_length=200)

class Field(models.Model):
    model = models.ForeignKey(Model, related_name="fields")
    field_type = models.CharField(max_length=50, choices=choices)
    value = models.CharField(max_length=50)

class Schema(models.Model):
    """
        tutaj bedzie schema mojego modelu abym mogl dynamicznie go tworzyc wraz ze wszystkimi polami
    """
0

IMHO lepiej zrobić osobną tabelę na każdy typ, a najlepiej ogólnie unikać EAV. Rozważ JSONField albo key-value/document based db.

0

@iksde:
Czemu omijac EAV? Mozesz rozwinac? :)
JsonField wyglada ciekawie zastanawia mnie tylko jak zadziala to gdy uzytkownik bedzie rowniez definiowal swoje klucze a potem jak dobrze pisac query aby je wyluskac. Zainteresuje sie tym szerzej :) dzieki

0
Nadziany Szewc napisał(a):

@iksde:
Czemu omijac EAV? Mozesz rozwinac? :)

Bo musisz robić dziesiątki joinów, castów i innych operacji żeby wyciągnąć dane. Słabo się to skaluje wraz ze wzrostem "pól" przechowywanych w EAV-owych tabelach.

Nadziany Szewc napisał(a):

@iksde:
JsonField wyglada ciekawie zastanawia mnie tylko jak zadziala to gdy uzytkownik bedzie rowniez definiowal swoje klucze a potem jak dobrze pisac query aby je wyluskac. Zainteresuje sie tym szerzej :) dzieki

Postgres ma dobre wsparcie do JSONFieldów: https://www.postgresql.org/docs/9.5/static/functions-json.html. Z tego co pamiętam większość tych operatorów nie jest zaimplementowana w Django ORM, ale nic nie stoi na przeszkodzie, żeby pisać raw SQL.

0

@iksde: a jak widzisz validacje takich Jsonowych pol?

0
Mały Samiec napisał(a):

@iksde: a jak widzisz validacje takich Jsonowych pol?

Można użyć np. tego https://schematics.readthedocs.io/en/latest/

1 użytkowników online, w tym zalogowanych: 0, gości: 1