Guest User

Untitled

a guest
May 23rd, 2018
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.98 KB | None | 0 0
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3.  
  4.  
  5. from django.db import models
  6. from django.contrib.postgres.fields import JSONField
  7. from django_vises.model_base import ModelBaseObject
  8.  
  9.  
  10. __all__ = ['AbstractGeneralObject', 'GeneralObject']
  11.  
  12.  
  13. class GeneralObjectManager(models.Manager):
  14. def set_value(self, group, key=None, value=None):
  15. """set|create/update"""
  16. if key is None:
  17. key = group
  18.  
  19. obj = self.get_queryset_by_group_and_key(group=group, key=key).first()
  20. if obj is None:
  21. obj = GeneralObject(
  22. group=group,
  23. key=key,
  24. value=value
  25. )
  26.  
  27. else:
  28. obj.value = value
  29.  
  30. obj.save()
  31. return obj
  32.  
  33. def get_value(self, group, key=None):
  34. """get value"""
  35. if key is None:
  36. key = group
  37.  
  38. obj = self.get_queryset_by_group_and_key(group=group, key=key).first()
  39.  
  40. if obj is None:
  41. return None
  42.  
  43. return obj.value
  44.  
  45. def get_object(self, group, key=None):
  46. """get object"""
  47. return self.get_queryset_by_group_and_key(group=group, key=key).first()
  48.  
  49. def get_queryset_by_group_and_key(self, group, key=None):
  50. """get queryset"""
  51. if key is None:
  52. return self.get_queryset().filter(group=group)
  53.  
  54. else:
  55. return self.get_queryset().filter(group=group, key=key)
  56.  
  57.  
  58. class AbstractGeneralObject(ModelBaseObject):
  59. """An abstract base class implementing for GeneralOption"""
  60.  
  61. group = models.CharField(
  62. # 分类或用途
  63. max_length=50,
  64. null=False,
  65. )
  66. key = models.CharField(
  67. max_length=50,
  68. null=False,
  69. )
  70. value = JSONField(
  71. # 内容格式只要符合 JSON 规范即可
  72. null=True,
  73. )
  74.  
  75. objects = GeneralObjectManager()
  76.  
  77. class Meta(object):
  78. abstract = True
  79.  
  80.  
  81. class GeneralObject(AbstractGeneralObject):
  82. """GeneralOption"""
  83.  
  84. class Meta(object):
  85. db_table = 'django_vises_general_object'
Add Comment
Please, Sign In to add comment