| from django.db import models |
| from django.conf import settings |
| from django.contrib.postgres.fields import JSONField |
| |
| from django.contrib.contenttypes.models import ContentType |
| from django.contrib.contenttypes.fields import GenericForeignKey |
| |
| from django.contrib.auth import get_user_model |
| from django.contrib.auth.models import Group |
| |
| from custom_user.models import AbstractEmailUser |
| |
| from guardian.mixins import GuardianUserMixin |
| |
| # Create your models here. |
| class UserProfile(AbstractEmailUser, GuardianUserMixin): |
| |
| public_contact = models.BooleanField(default=False) |
| |
| class Meta: |
| permissions = ( |
| ("view_userprofile", "view profile information"), |
| ) |
| |
| def __unicode__(self): |
| return self.email |
| |
| class Organization(models.Model): |
| name = models.CharField(max_length=255) |
| |
| members = models.ManyToManyField(UserProfile, through='Membership') |
| |
| member_group = models.OneToOneField(Group, null=True, blank=True, |
| related_name='members_of') |
| admin_group = models.OneToOneField(Group, null=True, blank=True, |
| related_name='admins_of') |
| |
| class Meta: |
| permissions = ( |
| ("view_organization", "view organization information"), |
| ) |
| |
| def __unicode__(self): |
| return self.name |
| |
| class Membership(models.Model): |
| user = models.ForeignKey(UserProfile, null=True, blank=False) |
| org = models.ForeignKey(Organization, null=True, blank=False) |
| join_date = models.DateTimeField() |
| is_admin = models.BooleanField(default=False) |
| |
| class Application(models.Model): |
| name = models.CharField(max_length=255) |
| |
| isPublic = models.BooleanField(default=True) |
| |
| #Application owner can be either a UserProfile or an Organization |
| limit = models.Q(app_label='app_mgr', model='userprofile') | \ |
| models.Q(app_label='app_mgr', model='organization') |
| #limit = {'app_label__in': ('app_mgr',), |
| # 'model__in': ('UserProfile', 'Organization', ), } |
| content_type = models.ForeignKey( |
| ContentType, |
| verbose_name='application owner', |
| limit_choices_to=limit, |
| null=True, |
| blank=True, |
| ) |
| object_id = models.PositiveIntegerField( |
| verbose_name='app owner id', |
| null=True, |
| ) |
| content_object = GenericForeignKey('content_type', 'object_id') |
| |
| class Meta: |
| permissions = ( |
| ("view_application", "read access to the application"), |
| ) |
| |
| def __unicode__(self): |
| return self.name |
| |
| class AppVersion(models.Model): |
| name = models.CharField(max_length=255) |
| |
| app = models.ForeignKey(Application, null=True, blank=False) |
| |
| aliases = JSONField() |
| domain = models.URLField(max_length=255) |
| |
| def __unicode__(self): |
| return self.name |