Skip to content

Instantly share code, notes, and snippets.

@symroe
Created July 6, 2016 09:32
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save symroe/8c05e48e9e43cc69f6acd27afd9cad6d to your computer and use it in GitHub Desktop.
Save symroe/8c05e48e9e43cc69f6acd27afd9cad6d to your computer and use it in GitHub Desktop.
from django.db import transaction
from django.db import models
class Collection(models.Model):
name = models.CharField(blank=True, max_length=100)
revision = models.IntegerField(blank=True, null=False)
@transaction.atomic
def save(self, items_dict, *args, **kwargs):
if not self.revision:
self.revision = 1
else:
self.revision += 1
ret = super(Collection, self).save(*args, **kwargs)
self.save_items(items_dict)
return ret
def save_items(self, values_dict):
CollectionItems.objects.filter(collection=self).update(latest=False)
for k, v in values_dict.items():
CollectionItems.objects.create(
key=k,
value=v,
revision=self.revision,
collection=self
)
class CollectionItems(models.Model):
collection = models.ForeignKey(Collection)
revision = models.IntegerField(blank=True, null=False)
key = models.CharField(blank=True, max_length=100)
value = models.TextField(blank=True)
latest = models.BooleanField(default=True)
# CollectionItems.objects.filter(latest=True, key='tag', value='Foo')
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment