python - Data models dependencies, can I simplify these objects? -
essentially have 6 object models, 3 regular objects , 3 dependencies of objects. individually, these objects can dependent on 1 or multiple instances of each of 3 regular objects.
my question: best practice? want able add new dependency regular object when needed. example:
a = a.objects.get(id=1) adependency = adependencies.objects.get(dependentto=a) then, i'd have object of dependencies a.
alternatively, did think of way merge 3 dependency objects one; however, i'm unsure whether it's practice.
class dependencies(models.model): id = models.charfield(max_length=16) dependentto = charfield(max_length=16) = models.manytomanyfield(a) b = models.manytomanyfield(b) c = models.manytomanyfield(c) in scenario, don't use foreignkey map dependentto object. instead, use object id pull object - allowing me class agnostic; however, require unique ids throughout 3 regular objects.
a = a.objects.get(id=1) adependency = adependencies.objects.get(dependentto=a.id) one more idea! possibly still use foreignkey's, pass in string class name instead?
class dependencies(models.model): id = models.charfield(max_length=16) type = models.charfield(max_length=16) dependentto = foreignkey(type) = models.manytomanyfield(a) b = models.manytomanyfield(b) c = models.manytomanyfield(c) object models:
class a(models.model): id = models.charfield(max_length=16) title = models.charfield(max_length=32) summary = models.charfield(max_length=256) class b(models.model): id = models.charfield(max_length=16) title = models.charfield(max_length=32) summary = models.charfield(max_length=256) = models.foreignkey(a) class c(models.model): id = models.charfield(max_length=16) title = models.charfield(max_length=32) summary = models.charfield(max_length=256) b = models.foreignkey(b) class adependencies(models.model): id = models.charfield(max_length=16) dependentto = models.foreignkey(a) = models.manytomanyfield(a) b = models.manytomanyfield(b) c = models.manytomanyfield(c) class bdependencies(models.model): id = models.charfield(max_length=16) dependentto = models.foreignkey(b) = models.manytomanyfield(a) b = models.manytomanyfield(b) c = models.manytomanyfield(c) class cdependencies(models.model): id = models.charfield(max_length=16) dependentto = models.foreignkey(b) = models.manytomanyfield(a) b = models.manytomanyfield(b) c = models.manytomanyfield(c) thanks!
this can done lot simpler. define dependency model instead of dependencies model. need contenttypes django contribution:
from django.db import models django.contrib.contenttypes.fields import genericforeignkey django.contrib.contenttypes.models import contenttype class dependency(models.model): dependent_contenttype = models.foreignkey(contenttype) dependent_id = models.positiveintegerfield() dependent = genericforeignkey('dependent_contenttype', 'dependent_id') prerequisite_contenttype = models.foreignkey(contenttype) prerequisite_id = models.positiveintegerfield() prerequisite = genericforeignkey('prerequisite_contenttype', 'prerequisite_id') then can make dependencies reverse generic relation on models a, b , c if like:
class a: # ... dependencies = genericrelation( dependency, content_type_field='dependent_contenttype', object_id_field='dependent_id')
Comments
Post a Comment