LIL-287. Add SubscriptionCategory & EmailSubscription models

remotes/origin/hasaccess
Ivlev Denis 8 years ago
parent 5012f42786
commit 2b17eafb86
  1. 16
      apps/user/admin.py
  2. 45
      apps/user/migrations/0015_auto_20180315_0547.py
  3. 20
      apps/user/migrations/0016_auto_20180315_0603.py
  4. 18
      apps/user/migrations/0017_subscriptioncategory_auto_add.py
  5. 37
      apps/user/models.py

@ -3,7 +3,7 @@ from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from .models import AuthorRequest from .models import AuthorRequest, EmailSubscription, SubscriptionCategory
User = get_user_model() User = get_user_model()
@ -33,3 +33,17 @@ class AuthorRequestAdmin(admin.ModelAdmin):
'created_at', 'created_at',
'update_at', 'update_at',
) )
@admin.register(SubscriptionCategory)
class SubscriptionCategoryAdmin(admin.ModelAdmin):
list_display = ('title',)
@admin.register(EmailSubscription)
class EmailSubscriptionAdmin(admin.ModelAdmin):
list_display = (
'id',
'user',
'email',
)

@ -0,0 +1,45 @@
# Generated by Django 2.0.3 on 2018-03-15 05:47
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('user', '0014_authorrequest_accepted_send_at'),
]
operations = [
migrations.CreateModel(
name='EmailSubscription',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('email', models.EmailField(max_length=254, unique=True, verbose_name='email address')),
('mailchimp_status', models.PositiveSmallIntegerField(choices=[(0, 'error'), (1, 'sent')], default=0)),
],
),
migrations.CreateModel(
name='SubscriptionCategory',
fields=[
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
('title', models.CharField(max_length=100)),
],
options={
'verbose_name': 'Категория подписки',
'verbose_name_plural': 'Категории подписки',
'ordering': ('title',),
},
),
migrations.AddField(
model_name='emailsubscription',
name='categories',
field=models.ManyToManyField(to='user.SubscriptionCategory'),
),
migrations.AddField(
model_name='emailsubscription',
name='user',
field=models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
),
]

@ -0,0 +1,20 @@
# Generated by Django 2.0.3 on 2018-03-15 06:03
from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion
class Migration(migrations.Migration):
dependencies = [
('user', '0015_auto_20180315_0547'),
]
operations = [
migrations.AlterField(
model_name='emailsubscription',
name='user',
field=models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, related_name='email_subscription', to=settings.AUTH_USER_MODEL),
),
]

@ -0,0 +1,18 @@
# Generated by Django 2.0.3 on 2018-03-15 06:18
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('user', '0016_auto_20180315_0603'),
]
operations = [
migrations.AddField(
model_name='subscriptioncategory',
name='auto_add',
field=models.BooleanField(default=False),
),
]

@ -99,10 +99,21 @@ def send_user_info_to_mixpanel(sender, instance=None, created=False, **kwargs):
instance.first_name, instance.first_name,
instance.last_name, instance.last_name,
instance.date_joined, instance.date_joined,
instance.role, dict(User.ROLE_CHOICES).get(instance.role),
) )
@receiver(post_save, sender=User)
def auto_create_subscription(sender, instance=None, created=False, **kwargs):
if not hasattr(instance, 'email_subscription'):
instance.email_subscription = EmailSubscription.objects.create(
user=instance,
email=instance.email,
)
instance.email_subscription.categories.set(SubscriptionCategory.objects.filter(auto_add=True))
instance.save()
class AuthorRequestManager(models.Manager): class AuthorRequestManager(models.Manager):
def create_by_user(self, user): def create_by_user(self, user):
obj = self.model( obj = self.model(
@ -190,3 +201,27 @@ def handle_authorrequest_update(sender, instance=None, created=False, update_fie
) )
instance.accepted_send_at = now() instance.accepted_send_at = now()
instance.save() instance.save()
class SubscriptionCategory(models.Model):
title = models.CharField(max_length=100)
auto_add = models.BooleanField(default=False)
class Meta:
verbose_name = 'Категория подписки'
verbose_name_plural = 'Категории подписки'
ordering = ('title',)
class EmailSubscription(models.Model):
ERROR = 0
SENT = 1
MAILCHIMP_STATUS_CHOICES = (
(ERROR, 'error'),
(SENT, 'sent'),
)
user = models.OneToOneField(User, null=True, blank=True, on_delete=models.CASCADE, related_name='email_subscription')
email = models.EmailField(_('email address'), unique=True)
categories = models.ManyToManyField(SubscriptionCategory)
mailchimp_status = models.PositiveSmallIntegerField(choices=MAILCHIMP_STATUS_CHOICES, default=ERROR)

Loading…
Cancel
Save