# -*- coding: utf-8 -*-
# Generated by Django 1.9.7 on 2016-06-29 05:12
from __future__ import unicode_literals

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

    dependencies = [
        ('auth', '0007_alter_validators_add_error_messages'),
        ('app_mgr', '0002_membership_is_admin'),
    ]

    operations = [
        migrations.AddField(
            model_name='organization',
            name='admin_group',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='admins_of', to='auth.Group'),
        ),
        migrations.AddField(
            model_name='organization',
            name='member_group',
            field=models.OneToOneField(null=True, on_delete=django.db.models.deletion.CASCADE, related_name='members_of', to='auth.Group'),
        ),
    ]
