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
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
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?
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
"""
IMHO lepiej zrobić osobną tabelę na każdy typ, a najlepiej ogólnie unikać EAV. Rozważ JSONField albo key-value/document based db.
@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
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.
@iksde: a jak widzisz validacje takich Jsonowych pol?
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/