Exemple #1
0
class WaterQuality(AuthUserDetail, CreateUpdateTime):
    """
    Water quality model
    """
    record_date = models.DateTimeField(unique=True, default=datetime.now)
    julian_day = models.SmallIntegerField()
    day_frac = models.DecimalField(max_digits=7,
                                   decimal_places=3,
                                   default=Decimal('0.0'),
                                   verbose_name='Fraction of Day')
    temperature = models.DecimalField(max_digits=5,
                                      decimal_places=2,
                                      blank=True,
                                      null=True,
                                      default=Decimal('0.0'),
                                      verbose_name='FTemperature (°C)')
    ph_units = models.DecimalField(max_digits=5,
                                   decimal_places=2,
                                   blank=True,
                                   null=True,
                                   default=Decimal('0.0'))
    stream_depth = models.DecimalField(max_digits=5,
                                       decimal_places=2,
                                       blank=True,
                                       null=True,
                                       default=Decimal('0.0'))
    sp_cond = models.DecimalField(max_digits=6,
                                  decimal_places=2,
                                  blank=True,
                                  null=True,
                                  default=Decimal('0.0'),
                                  verbose_name='Specific Conductance (uS/cm)')
    turbidity_ntu = models.DecimalField(max_digits=8,
                                        decimal_places=2,
                                        blank=True,
                                        null=True,
                                        default=Decimal('0.0'))
    ph_mv = models.DecimalField(max_digits=7,
                                decimal_places=2,
                                blank=True,
                                null=True,
                                default=Decimal('0.0'))
    salinity_ps = models.DecimalField(max_digits=5,
                                      decimal_places=2,
                                      blank=True,
                                      null=True,
                                      default=Decimal('0.0'),
                                      verbose_name='Potential Soil Salinity')
    comment = models.TextField(blank=True, null=True)

    def __unicode__(self):
        str_format = '{0}'.format(self.record_date)
        return str_format

    def __str__(self):
        str_format = '{0}'.format(self.record_date)
        return str_format

    class Meta:
        ordering = ['-time_created', '-last_update']
        verbose_name_plural = 'Water Quality'
Exemple #2
0
class UserProfile(models.Model):
    """
    用户表
    """
    gender_choices = ((1, u'男'), (2, u'女'))
    building_choices = ((1, u'东照大厦1'), (2, u'东照大厦2'))
    floor_choices = (
        (1, u'一楼'),
        (2, u'二楼'),
        (3, u'三楼'),
        (4, u'四楼'),
    )
    role_choices = (
        (1, u'法人'),
        (2, u'财务'),
        (3, u'行政'),
        (4, u'其他'),
    )
    dpt_choices = (
        (1, u'法人'),
        (2, u'财务'),
        (3, u'行政'),
        (4, u'其他'),
    )
    uid = models.CharField(max_length=64,
                           verbose_name='UID',
                           null=True,
                           blank=True)

    building = models.SmallIntegerField(choices=building_choices,
                                        default=1,
                                        verbose_name='大厦')
    floor = models.SmallIntegerField(choices=floor_choices,
                                     default=1,
                                     verbose_name='楼层')
    room = models.IntegerField(verbose_name='房号')
    company = models.CharField(max_length=64, verbose_name='公司名称')
    username = models.CharField(max_length=32, verbose_name='用户名')
    role = models.SmallIntegerField(choices=role_choices,
                                    default=1,
                                    verbose_name='所属角色')
    phone = models.CharField(max_length=32, verbose_name='手机')

    is_superuser = models.BooleanField(default=False, verbose_name='认证')

    createtime = models.DateTimeField(auto_now_add=True)
    department = models.SmallIntegerField(choices=dpt_choices,
                                          verbose_name='所属部门',
                                          null=True,
                                          blank=True)
    email = models.EmailField(max_length=32,
                              verbose_name='邮件',
                              null=True,
                              blank=True)
    age = models.PositiveIntegerField(verbose_name='年龄', null=True, blank=True)
    gender = models.SmallIntegerField(choices=gender_choices,
                                      null=True,
                                      blank=True,
                                      verbose_name='性别')

    class Meta:
        verbose_name = '用户表'
        verbose_name_plural = '用户表'

    def __str__(self):
        return self.username
Exemple #3
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('course', '0003_auto_20200717_0919'),
    ]

    operations = [
        migrations.CreateModel(
            name='Order',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('is_show',
                 models.BooleanField(default=False, verbose_name='是否显示')),
                ('orders', models.IntegerField(default=1,
                                               verbose_name='图片排序')),
                ('is_delete',
                 models.BooleanField(default=False, verbose_name='是否删除')),
                ('create_time',
                 models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
                ('update_time',
                 models.DateTimeField(auto_now=True, verbose_name='修改时间')),
                ('order_title',
                 models.CharField(max_length=150, verbose_name='订单标题')),
                ('total_price',
                 models.DecimalField(decimal_places=2,
                                     default=0,
                                     max_digits=6,
                                     verbose_name='订单总价')),
                ('real_price',
                 models.DecimalField(decimal_places=2,
                                     default=0,
                                     max_digits=6,
                                     verbose_name='实付金额')),
                ('order_number',
                 models.CharField(max_length=64, verbose_name='订单号')),
                ('order_status',
                 models.SmallIntegerField(choices=[(0, '未支付'), (1, '已支付'),
                                                   (2, '已取消'), (3, '超时取消')],
                                          default=0,
                                          verbose_name='订单状态')),
                ('pay_type',
                 models.SmallIntegerField(choices=[(1, '支付宝'), (2, '微信支付')],
                                          default=1,
                                          verbose_name='支付方式')),
                ('credit',
                 models.IntegerField(default=0, verbose_name='使用的积分数量')),
                ('coupon',
                 models.IntegerField(null=True, verbose_name='用户优惠券ID')),
                ('order_desc',
                 models.TextField(max_length=500, verbose_name='订单描述')),
                ('pay_time',
                 models.DateTimeField(null=True, verbose_name='支付时间')),
                ('user',
                 models.ForeignKey(
                     on_delete=django.db.models.deletion.DO_NOTHING,
                     related_name='user_orders',
                     to=settings.AUTH_USER_MODEL,
                     verbose_name='下单用户')),
            ],
            options={
                'verbose_name': '订单记录',
                'verbose_name_plural': '订单记录',
                'db_table': 'bz_order',
            },
        ),
        migrations.CreateModel(
            name='OrderDetail',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('is_show',
                 models.BooleanField(default=False, verbose_name='是否显示')),
                ('orders', models.IntegerField(default=1,
                                               verbose_name='图片排序')),
                ('is_delete',
                 models.BooleanField(default=False, verbose_name='是否删除')),
                ('create_time',
                 models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
                ('update_time',
                 models.DateTimeField(auto_now=True, verbose_name='修改时间')),
                ('expire',
                 models.IntegerField(default='0',
                                     help_text='0表示永久有效',
                                     verbose_name='有效期周期')),
                ('price',
                 models.DecimalField(decimal_places=2,
                                     max_digits=6,
                                     verbose_name='课程原价')),
                ('real_price',
                 models.DecimalField(decimal_places=2,
                                     max_digits=6,
                                     verbose_name='课程实价')),
                ('discount_name',
                 models.CharField(default='',
                                  max_length=120,
                                  verbose_name='优惠类型')),
                ('course',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   related_name='course_orders',
                                   to='course.Course',
                                   verbose_name='课程ID')),
                ('order',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   related_name='order_courses',
                                   to='order.Order',
                                   verbose_name='订单ID')),
            ],
            options={
                'verbose_name': '订单详情',
                'verbose_name_plural': '订单详情',
                'db_table': 'bz_order_detail',
            },
        ),
    ]
Exemple #4
0
class Method(models.Model):
    name = models.CharField(max_length=20, primary_key=True)
    # bit to store different types. e.g 5 = 0b101 = 1 << NUMERIC |  1 << DM; 4 = 0b100 = 1 << NUMERIC
    type = models.SmallIntegerField()
Exemple #5
0
class Redirect(models.Model):
    """A HTTP redirect associated with a Project."""

    project = models.ForeignKey(Project,
                                verbose_name=_('Project'),
                                related_name='redirects')

    redirect_type = models.CharField(_('Redirect Type'),
                                     max_length=255,
                                     choices=TYPE_CHOICES,
                                     help_text=redirect_type_helptext)

    from_url = models.CharField(_('From URL'),
                                max_length=255,
                                db_index=True,
                                help_text=from_url_helptext,
                                blank=True)

    to_url = models.CharField(_('To URL'),
                              max_length=255,
                              db_index=True,
                              help_text=to_url_helptext,
                              blank=True)

    http_status = models.SmallIntegerField(_('HTTP Status'),
                                           choices=HTTP_STATUS_CHOICES,
                                           default=301)
    status = models.BooleanField(choices=STATUS_CHOICES, default=True)

    create_dt = models.DateTimeField(auto_now_add=True)
    update_dt = models.DateTimeField(auto_now=True)

    objects = RedirectManager()

    class Meta:
        verbose_name = _('redirect')
        verbose_name_plural = _('redirects')
        ordering = ('-update_dt', )

    def __unicode__(self):
        if self.redirect_type == 'prefix':
            return ugettext('Prefix Redirect: %s ->' % self.from_url)
        elif self.redirect_type == 'page':
            return ugettext('Page Redirect: %s -> %s' %
                            (self.from_url, self.to_url))
        else:
            return ugettext('Redirect: %s' % self.get_redirect_type_display())

    def get_full_path(self, filename, language=None, version_slug=None):
        """
        Return a full path for a given filename.

        This will include version and language information. No protocol/domain
        is returned.
        """
        # Handle explicit http redirects
        if re.match('^https?://', filename):
            return filename

        return resolve_path(project=self.project,
                            language=language,
                            version_slug=version_slug,
                            filename=filename)

    def get_redirect_path(self, path, language=None, version_slug=None):
        method = getattr(self,
                         'redirect_{type}'.format(type=self.redirect_type))
        return method(path, language=language, version_slug=version_slug)

    def redirect_prefix(self, path, language=None, version_slug=None):
        if path.startswith(self.from_url):
            log.debug('Redirecting %s', self)
            cut_path = re.sub('^%s' % self.from_url, '', path)
            to = self.get_full_path(filename=cut_path,
                                    language=language,
                                    version_slug=version_slug)
            return to

    def redirect_page(self, path, language=None, version_slug=None):
        if path == self.from_url:
            log.debug('Redirecting %s', self)
            to = self.get_full_path(filename=self.to_url.lstrip('/'),
                                    language=language,
                                    version_slug=version_slug)
            return to

    def redirect_exact(self, path, **__):
        if path == self.from_url:
            log.debug('Redirecting %s', self)
            return self.to_url
        # Handle full sub-level redirects
        if '$rest' in self.from_url:
            match = self.from_url.split('$rest')[0]
            if path.startswith(match):
                cut_path = re.sub('^%s' % match, self.to_url, path)
                return cut_path

    def redirect_sphinx_html(self, path, language=None, version_slug=None):
        for ending in ['/', '/index.html']:
            if path.endswith(ending):
                log.debug('Redirecting %s', self)
                path = path[1:]  # Strip leading slash.
                to = re.sub(ending + '$', '.html', path)
                return self.get_full_path(filename=to,
                                          language=language,
                                          version_slug=version_slug)

    def redirect_sphinx_htmldir(self, path, language=None, version_slug=None):
        if path.endswith('.html'):
            log.debug('Redirecting %s', self)
            path = path[1:]  # Strip leading slash.
            to = re.sub('.html$', '/', path)
            return self.get_full_path(filename=to,
                                      language=language,
                                      version_slug=version_slug)
Exemple #6
0
class Request(models.Model):
    # Response infomation
    response = models.SmallIntegerField(_('response'), choices=HTTP_STATUS_CODES, default=200)

    # Request infomation
    method = models.CharField(_('method'), default='GET', max_length=7)
    path = models.CharField(_('path'), max_length=255)
    time = models.DateTimeField(_('time'), default=timezone.now, db_index=True)

    is_secure = models.BooleanField(_('is secure'), default=False)
    is_ajax = models.BooleanField(
        _('is ajax'),
        default=False,
        help_text=_('Wheather this request was used via javascript.'),
    )

    # User infomation
    ip = models.GenericIPAddressField(_('ip address'))
    user = models.ForeignKey(AUTH_USER_MODEL, blank=True, null=True, verbose_name=_('user'))
    client = models.ForeignKey(OAUTH_CLIENT_MODEL, blank=True, null=True, verbose_name=_('client'))
    referer = models.URLField(_('referer'), max_length=255, blank=True, null=True)
    user_agent = models.CharField(_('user agent'), max_length=255, blank=True, null=True)
    language = models.CharField(_('language'), max_length=255, blank=True, null=True)

    objects = RequestManager()

    class Meta:
        app_label = 'request'
        verbose_name = _('request')
        verbose_name_plural = _('requests')
        ordering = ('-time',)

    def __str__(self):
        return '[%s] %s %s %s' % (self.time, self.method, self.path, self.response)

    def get_user(self):
        return get_user_model().objects.get(pk=self.user_id)

    def from_http_request(self, request, response=None, commit=True):
        # Request infomation
        self.method = request.method
        self.path = request.path[:255]

        self.is_secure = request.is_secure()
        self.is_ajax = request.is_ajax()

        # User infomation
        self.ip = request.META.get('REMOTE_ADDR', '')
        self.referer = request.META.get('HTTP_REFERER', '')[:255]
        self.user_agent = request.META.get('HTTP_USER_AGENT', '')[:255]
        self.language = request.META.get('HTTP_ACCEPT_LANGUAGE', '')[:255]

        if hasattr(request, 'user'):
            if request.user.is_authenticated():
                self.user = request.user

        if hasattr(request, 'auth_client'):
                self.client = request.auth_client

        if response:
            self.response = response.status_code

            if (response.status_code == 301) or (response.status_code == 302):
                self.redirect = response['Location']

        if commit:
            self.save()

    @property
    def browser(self):
        if not self.user_agent:
            return

        if not hasattr(self, '_browser'):
            self._browser = browsers.resolve(self.user_agent)
        return self._browser[0]

    @property
    def keywords(self):
        if not self.referer:
            return

        if not hasattr(self, '_keywords'):
            self._keywords = engines.resolve(self.referer)
        if self._keywords:
            return ' '.join(self._keywords[1]['keywords'].split('+'))

    @property
    def hostname(self):
        try:
            return gethostbyaddr(self.ip)[0]
        except Exception:  # socket.gaierror, socket.herror, etc
            return self.ip

    def save(self, *args, **kwargs):
        if not request_settings.LOG_IP:
            self.ip = request_settings.IP_DUMMY
        elif request_settings.ANONYMOUS_IP:
            parts = self.ip.split('.')[0:-1]
            parts.append('1')
            self.ip = '.'.join(parts)
        if not request_settings.LOG_USER:
            self.user = None

        super(Request, self).save(*args, **kwargs)
class Migration(migrations.Migration):

    dependencies = [
        ('dynadb', '0023_auto_20160725_1724'),
    ]

    operations = [
        migrations.AlterField(
            model_name='dyndbreferences',
            name='authors',
            field=models.CharField(
                blank=True,
                help_text='List of the authors separated by semicolon.',
                max_length=60,
                null=True,
                verbose_name='Authors'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='doi',
            field=models.CharField(blank=True,
                                   help_text='Digital object identifier.',
                                   max_length=80,
                                   null=True,
                                   unique=False,
                                   verbose_name='DOI'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='issue',
            field=models.CharField(blank=True,
                                   help_text='Issue number.',
                                   max_length=10,
                                   null=True,
                                   verbose_name='Issue'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='journal_press',
            field=models.CharField(
                blank=True,
                help_text='Name of the Journal or Press in case of a book.',
                max_length=60,
                null=True,
                verbose_name='Journal or Press'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='pages',
            field=models.CharField(
                blank=True,
                help_text=
                'Initial and final pages of the publication separated by dash.',
                max_length=16,
                null=True,
                verbose_name='Pages'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='pmid',
            field=models.IntegerField(
                blank=True,
                help_text='PubMed identifier or PubMed unique identifier',
                null=True,
                unique=True,
                verbose_name='PMID'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='pub_year',
            field=models.SmallIntegerField(blank=True,
                                           help_text='Year of publication',
                                           null=True,
                                           verbose_name='Publication year'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='title',
            field=models.CharField(blank=True,
                                   help_text='Title of the paper.',
                                   max_length=100,
                                   null=True,
                                   verbose_name='Title'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='url',
            field=models.CharField(
                blank=True,
                help_text=
                'Uniform Resource Locator to the publication resource',
                max_length=100,
                null=True,
                verbose_name='URL'),
        ),
        migrations.AlterField(
            model_name='dyndbreferences',
            name='volume',
            field=models.CharField(blank=True,
                                   help_text='Volume number.',
                                   max_length=10,
                                   null=True,
                                   verbose_name='Volume'),
        ),
    ]
Exemple #8
0
class Profile(models.Model):
    user = models.OneToOneField(User,
                                on_delete=models.CASCADE,
                                related_name='profile')
    avatar = models.ImageField(null=True,
                               blank=True,
                               upload_to='appaccounts/images/profiles/',
                               verbose_name='Аватар')
    description = models.TextField(max_length=1000,
                                   null=True,
                                   blank=True,
                                   verbose_name='О себе')
    created = models.DateTimeField(auto_now_add=True, null=True)
    score = models.IntegerField(null=True, blank=True, verbose_name='Баллы')
    index_avatar = models.SmallIntegerField(null=True,
                                            blank=True,
                                            verbose_name='Индекс аватара')
    need_password = models.BooleanField(null=True,
                                        default=False,
                                        verbose_name='Нужен пароль')

    def __str__(self):
        return self.user.username

    def get_absolute_url(self):
        return reverse('appaccounts:profile_edit')

    def get_name(self):
        if self.user.first_name:
            return self.user.first_name
        else:
            return self.user.username

    def get_avatar_url(self):
        if self.index_avatar and 0 < self.index_avatar <= 12:
            return settings.STATIC_URL + f'images/ico/people/student_avatars/student_avatar{self.index_avatar}.svg'
        if self.avatar:
            return self.avatar.url
        else:
            # return settings.STATIC_URL + 'images/ico/people/user_black.svg'
            return settings.STATIC_URL + 'images/ico/people/student1.svg'

    def get_avatar_white_url(self):
        if self.avatar:
            return self.avatar.url
        else:
            return settings.STATIC_URL + 'images/ico/people/student_white.svg'

    def get_description(self):
        if self.description:
            return self.description
        else:
            return 'Пользователь пока ничего не написал о себе'

    def get_profile_data(self, fields=None):

        profile_data_all = {
            'profile_id': self.id,
            'profile_name': self.user.username,
            'profile_description': self.description,
            'profile_avatar': self.avatar.url if self.avatar else '',
            'profile_url': self.get_absolute_url(),
        }

        if fields:
            profile_data = {}
            for field in fields:
                profile_data[field] = profile_data_all[field]
            return profile_data
        else:
            return profile_data_all

    def get_user_skills_data(self, user=None):

        from apptasks.models import Task, Skill
        from apporders.models import Order

        import json

        request_user = self.user if not user else user

        # формируем список оценок только по тем скилам, по которым у юзера есть решенные задачи
        user_order_list = Order.objects.select_related('task__skill').filter(
            user=request_user)
        user_skills = []
        for user_order in user_order_list:

            order_rate = round(user_order.get_rate()['rate'], 1)

            try:
                skill = next(item for item in user_skills
                             if item["skill"] == user_order.task.skill)
                skill['rate'] += order_rate
                skill['task_count'] += 1
            except:

                order_data = {
                    'skill': user_order.task.skill,
                    'rate': order_rate,
                    'task_count': 1
                }
                user_skills.append(order_data)

            extra_skill_count = user_order.task.get_extra_skill_count()
            if extra_skill_count:
                extra_order_rate = round(order_rate * 30 / 100, 1)
                extra_skill_list = (user_order.task.extra_skill1,
                                    user_order.task.extra_skill2,
                                    user_order.task.extra_skill3)
                for extra_skill in extra_skill_list:
                    if extra_skill:
                        try:
                            skill = next(item for item in user_skills
                                         if item["skill"] == extra_skill)
                            skill['rate'] += extra_order_rate
                            skill['task_count'] += 1
                        except:
                            order_data = {
                                'skill': extra_skill,
                                'rate': extra_order_rate,
                                'task_count': 1
                            }
                            user_skills.append(order_data)

        # формируем список всех скилов, которые есть в системе
        # и по каждому добавляем оценку юзера
        skill_list = Skill.objects.all()
        user_skills_data = []
        user_total_rate = 0
        user_total_task_count = 0
        for skill in skill_list:
            skill_data = {'skill': str(skill), 'rate': 0}
            try:
                user_skill = next(item for item in user_skills
                                  if item["skill"] == skill)
                skill_data['rate'] += user_skill['rate']
                user_total_rate += user_skill['rate']
                user_total_task_count += user_skill['task_count']
            except:
                skill_data['rate'] = 0

            user_skills_data.append(skill_data)

        data = {
            'total_task_count':
            user_total_task_count,
            'total_task_count_display':
            '--' if user_total_task_count == 0 else str(user_total_task_count),
            'total_rate':
            round(user_total_rate, 1),
            'total_rate_display':
            '--' if round(user_total_rate, 1) == 0 else str(
                round(user_total_rate, 1)),
            'skills_data':
            user_skills_data
        }

        return data

    @staticmethod
    def get_avatar_list():
        avatar_list = []
        for i in range(12):
            avatar_list.append({
                'number':
                i + 1,
                'url':
                settings.STATIC_URL +
                f'images/ico/people/student_avatars/student_avatar{i+1}.svg'
            })
        return avatar_list

    @property
    def current_lesson(self):
        return self.user.current_lessons.select_related(
            'lesson__module__course').first()
        # if current_lessons.exists():
        #     return current_lessons.select_related('lesson__module__course').first().lesson
        # else:
        #     return None

    @property
    def is_manager(self):
        return user_is_manager(self.user)
Exemple #9
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
        ('users', '0003_auto_20190814_1057'),
        ('goods', '0003_goodsvisitcount'),
    ]

    operations = [
        migrations.CreateModel(
            name='OrderGoods',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('create_time',
                 models.DateField(auto_now_add=True, verbose_name='创建时间')),
                ('update_time',
                 models.DateField(auto_now=True, verbose_name='更新时间')),
                ('count', models.IntegerField(default=1, verbose_name='数量')),
                ('price',
                 models.DecimalField(decimal_places=2,
                                     max_digits=10,
                                     verbose_name='单价')),
                ('comment', models.TextField(default='', verbose_name='评价信息')),
                ('score',
                 models.SmallIntegerField(choices=[(0, '0分'), (1, '20分'),
                                                   (2, '40分'), (3, '60分'),
                                                   (4, '80分'), (5, '100分')],
                                          default=5,
                                          verbose_name='满意度评分')),
                ('is_anonymous',
                 models.BooleanField(default=False, verbose_name='是否匿名评价')),
                ('is_commented',
                 models.BooleanField(default=False, verbose_name='是否评价了')),
            ],
            options={
                'verbose_name': '订单商品',
                'verbose_name_plural': '订单商品',
                'db_table': 'tb_order_goods',
            },
        ),
        migrations.CreateModel(
            name='OrderInfo',
            fields=[
                ('create_time',
                 models.DateField(auto_now_add=True, verbose_name='创建时间')),
                ('update_time',
                 models.DateField(auto_now=True, verbose_name='更新时间')),
                ('order_id',
                 models.CharField(max_length=64,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='订单号')),
                ('total_count',
                 models.IntegerField(default=1, verbose_name='商品总数')),
                ('total_amount',
                 models.DecimalField(decimal_places=2,
                                     max_digits=10,
                                     verbose_name='商品总金额')),
                ('freight',
                 models.DecimalField(decimal_places=2,
                                     max_digits=10,
                                     verbose_name='运费')),
                ('pay_method',
                 models.SmallIntegerField(choices=[(1, '货到付款'), (2, '支付宝')],
                                          default=1,
                                          verbose_name='支付方式')),
                ('status',
                 models.SmallIntegerField(choices=[(1, '待支付'), (2, '待发货'),
                                                   (3, '待收货'), (4, '待评价'),
                                                   (5, '已完成'), (6, '已取消')],
                                          default=1,
                                          verbose_name='订单状态')),
                ('address',
                 models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
                                   to='users.Address',
                                   verbose_name='收货地址')),
                ('user',
                 models.ForeignKey(on_delete=django.db.models.deletion.PROTECT,
                                   to=settings.AUTH_USER_MODEL,
                                   verbose_name='下单用户')),
            ],
            options={
                'verbose_name': '订单基本信息',
                'verbose_name_plural': '订单基本信息',
                'db_table': 'tb_order_info',
            },
        ),
        migrations.AddField(
            model_name='ordergoods',
            name='order',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                related_name='skus',
                to='orders.OrderInfo',
                verbose_name='订单'),
        ),
        migrations.AddField(
            model_name='ordergoods',
            name='sku',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.PROTECT,
                to='goods.SKU',
                verbose_name='订单商品'),
        ),
    ]
Exemple #10
0
class UserProfile(AbstractBaseUser,PermissionsMixin):

    '''
    继承AbstractUser,扩展用户信息
    '''

    username = models.CharField(u'昵称', max_length=30, unique=True)
    first_name = models.CharField(u'名字', max_length=30, blank=True)
    last_name = models.CharField(u'姓氏', max_length=30, blank=True)
    email = models.EmailField(u'email', unique=True, null=True, blank=True)
    is_staff = models.BooleanField(u'职员状态', default=False, help_text='是否能够登录管理后台')
    is_active = models.BooleanField(u'是否激活', default=True, help_text='用户是否被激活,未激活则不能使用')
    date_joined = models.DateTimeField(u'创建日期', auto_now_add=True)
    avatar_url = models.ImageField(upload_to='avatar/%Y/%m', default='avatar/default_big.png', max_length=200, blank=True, null=True, verbose_name=u'头像220x220')
    avatar_middle_thumbnall = models.ImageField(upload_to='avatar/%Y/%m', default='avatar/default_middle.png', max_length=200, blank=True, null=True, verbose_name=u'头像104x104')
    avatar_small_thumbnall = models.ImageField(upload_to='avatar/%Y/%m', default='avatar/default_small.png', max_length=200, blank=True, null=True, verbose_name=u'头像70x70')
    avatar_alt = models.CharField(u'头像ALT说明', max_length=100, blank=True, null=True)
    qq = models.CharField(u'QQ号码', max_length=20, blank=True, null=True)
    mobile = models.CharField(u'手机号码', max_length=11, blank=True, null=True, unique=True)
    valid_email = models.SmallIntegerField(u'是否验证邮箱', default=0, choices=((0, u'否'),(1, u'是'),))
    company_name = models.CharField(u'公司名', max_length=150, blank=True, null=True)
    position = models.CharField(u'职位名', max_length=150, blank=True, null=True)
    description = models.TextField(u'个人介绍', blank=True, null=True)
    city = models.CharField(u'城市', max_length=30, null=True, blank=True)
    province = models.CharField(u'省份', max_length=30, null=True, blank=True)
    index = models.IntegerField(u'排列顺序(从小到大)',default=999)
    mylesson = models.ManyToManyField(Lesson, through=u'UserLearningLesson', verbose_name=u'我的学习章节')
    mystage = models.ManyToManyField(Stage, through=u'UserUnlockStage', verbose_name=u'我的解锁阶段')
    myfavorite = models.ManyToManyField(Course, through=u'MyFavorite', verbose_name=u'我的收藏')

    objects = UserProfileManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    class Meta:
        verbose_name = u'用户'
        verbose_name_plural = verbose_name
        db_table = 'user_profile'

    def get_full_name(self):
        '''
        Returns the first_name plus the last_name, with a space in between.
        '''
        full_name = '%s %s' % (self.first_name, self.last_name)
        return full_name.strip()

    def get_short_name(self):
        'Returns the short name for the user.'
        return self.first_name

    def email_user(self, subject, message, from_email=None, **kwargs):
        '''
        Sends an email to this User.
        '''
        send_mail(subject, message, from_email, [self.email], **kwargs)

    # 是否是老师
    def is_teacher(self):
        if self.groups.filter(name='老师').count() > 0 :
            return True
        return False

    # 是否是学生
    def is_student(self):
        if self.groups.filter(name='学生').count() > 0 :
            return True
        return False

    def __unicode__(self):
        return self.username
class Migration(migrations.Migration):

    dependencies = [
        ('products', '0002_auto_20160107_1545'),
    ]

    operations = [
        migrations.CreateModel(
            name='ProductImage',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=128)),
                ('image', models.ImageField(upload_to='images')),
                ('product',
                 models.ForeignKey(blank=True,
                                   null=True,
                                   on_delete=django.db.models.deletion.CASCADE,
                                   to='products.Product')),
            ],
        ),
        migrations.AddField(
            model_name='category',
            name='image',
            field=models.ImageField(
                default=1234,
                help_text=
                'The recommended size of a image is 80 x 80(+/-) px. But you can use any image sizes, they will be compressed or increased to the appropriate value.',
                upload_to='images'),
            preserve_default=False,
        ),
        migrations.AddField(
            model_name='technology',
            name='image',
            field=models.ImageField(
                default=123,
                help_text=
                'The recommended size of a image is 80 x 80(+/-) px. But you can use any image sizes, they will be compressed or increased to the appropriate value.',
                upload_to='images'),
            preserve_default=False,
        ),
        migrations.AlterField(
            model_name='touch',
            name='i_f',
            field=models.CharField(blank=True,
                                   max_length=32,
                                   null=True,
                                   verbose_name='Touch I/F'),
        ),
        migrations.AlterField(
            model_name='touch',
            name='points',
            field=models.SmallIntegerField(default=1,
                                           verbose_name='Touch Points'),
        ),
        migrations.AlterField(
            model_name='touch',
            name='type',
            field=models.CharField(max_length=128, verbose_name='Touch Type'),
        ),
    ]
Exemple #12
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Date',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('resume', models.TextField(blank=True)),
                ('date', models.DateField()),
                ('stars', models.PositiveSmallIntegerField(validators=[django.core.validators.MaxValueValidator(5), django.core.validators.MinValueValidator(1)])),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='Dedication',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('cycle', models.PositiveSmallIntegerField(default=1, validators=[django.core.validators.MaxValueValidator(8), django.core.validators.MinValueValidator(1)])),
                ('time', models.PositiveSmallIntegerField(validators=[django.core.validators.MinValueValidator(10)])),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='Role',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('name', models.CharField(max_length=50)),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='SmallNote',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('text', models.TextField()),
                ('date', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='diary.Date')),
                ('role', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='diary.Role')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='Task',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='TypeDedication',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('name', models.CharField(max_length=50)),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.CreateModel(
            name='TypeTask',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('created_at', models.DateTimeField(auto_now_add=True)),
                ('updated_at', models.DateTimeField(auto_now=True)),
                ('status', models.SmallIntegerField(choices=[(0, 'Inactive'), (1, 'Active')])),
                ('name', models.CharField(max_length=50)),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.AddField(
            model_name='task',
            name='type',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='diary.TypeTask'),
        ),
        migrations.AddField(
            model_name='task',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
        ),
        migrations.AddField(
            model_name='dedication',
            name='type',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='diary.TypeDedication'),
        ),
        migrations.AddField(
            model_name='dedication',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL),
        ),
    ]
Exemple #13
0
class Object(models.Model):
    id = models.CharField(primary_key=True, editable=False, max_length=30)
    title = models.CharField(max_length=5048, null=True)
    region = models.SmallIntegerField(null=True)
    signDate = models.DateField(null=True)
    contract = models.ForeignKey(Contract, on_delete=models.CASCADE)
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='AuthGroup',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=80, unique=True)),
            ],
            options={
                'db_table': 'auth_group',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='AuthGroupPermissions',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ],
            options={
                'db_table': 'auth_group_permissions',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='AuthPermission',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=255)),
                ('codename', models.CharField(max_length=100)),
            ],
            options={
                'db_table': 'auth_permission',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='AuthUser',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('password', models.CharField(max_length=128)),
                ('last_login', models.DateTimeField(blank=True, null=True)),
                ('is_superuser', models.IntegerField()),
                ('username', models.CharField(max_length=150, unique=True)),
                ('first_name', models.CharField(max_length=30)),
                ('last_name', models.CharField(max_length=150)),
                ('email', models.CharField(max_length=254)),
                ('is_staff', models.IntegerField()),
                ('is_active', models.IntegerField()),
                ('date_joined', models.DateTimeField()),
            ],
            options={
                'db_table': 'auth_user',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='AuthUserGroups',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ],
            options={
                'db_table': 'auth_user_groups',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='AuthUserUserPermissions',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
            ],
            options={
                'db_table': 'auth_user_user_permissions',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='City',
            fields=[
                ('id', models.AutoField(db_column='ID', primary_key=True, serialize=False)),
                ('name', models.CharField(db_column='Name', max_length=35)),
                ('district', models.CharField(db_column='District', max_length=20)),
                ('population', models.IntegerField(db_column='Population')),
            ],
            options={
                'db_table': 'city',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='Country',
            fields=[
                ('code', models.CharField(db_column='Code', max_length=3, primary_key=True, serialize=False)),
                ('continent', models.CharField(db_column='Continent', max_length=13)),
                ('region', models.CharField(db_column='Region', max_length=26)),
                ('surfacearea', models.FloatField(db_column='SurfaceArea')),
                ('indepyear', models.SmallIntegerField(blank=True, db_column='IndepYear', null=True)),
                ('population', models.IntegerField(db_column='Population')),
                ('lifeexpectancy', models.FloatField(blank=True, db_column='LifeExpectancy', null=True)),
                ('gnp', models.FloatField(blank=True, db_column='GNP', null=True)),
                ('gnpold', models.FloatField(blank=True, db_column='GNPOld', null=True)),
                ('localname', models.CharField(db_column='LocalName', max_length=45)),
                ('governmentform', models.CharField(db_column='GovernmentForm', max_length=45)),
                ('headofstate', models.CharField(blank=True, db_column='HeadOfState', max_length=60, null=True)),
                ('capital', models.IntegerField(blank=True, db_column='Capital', null=True)),
                ('code2', models.CharField(db_column='Code2', max_length=2)),
            ],
            options={
                'db_table': 'country',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='Countrylanguage',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('language', models.CharField(db_column='Language', max_length=30)),
                ('isofficial', models.CharField(db_column='IsOfficial', max_length=1)),
                ('percentage', models.FloatField(db_column='Percentage')),
            ],
            options={
                'db_table': 'countrylanguage',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='DjangoAdminLog',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('action_time', models.DateTimeField()),
                ('object_id', models.TextField(blank=True, null=True)),
                ('object_repr', models.CharField(max_length=200)),
                ('action_flag', models.SmallIntegerField()),
                ('change_message', models.TextField()),
            ],
            options={
                'db_table': 'django_admin_log',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='DjangoContentType',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('app_label', models.CharField(max_length=100)),
                ('model', models.CharField(max_length=100)),
            ],
            options={
                'db_table': 'django_content_type',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='DjangoMigrations',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('app', models.CharField(max_length=255)),
                ('name', models.CharField(max_length=255)),
                ('applied', models.DateTimeField()),
            ],
            options={
                'db_table': 'django_migrations',
                'managed': False,
            },
        ),
        migrations.CreateModel(
            name='DjangoSession',
            fields=[
                ('session_key', models.CharField(max_length=40, primary_key=True, serialize=False)),
                ('session_data', models.TextField()),
                ('expire_date', models.DateTimeField()),
            ],
            options={
                'db_table': 'django_session',
                'managed': False,
            },
        ),
    ]
Exemple #15
0
class Test(models.Model):
    exam = models.ForeignKey(Exam, on_delete=models.CASCADE)
    score = models.PositiveSmallIntegerField()
    minutes_left = models.SmallIntegerField()
    date = models.DateField(auto_now_add=True)
Exemple #16
0
class SiteProfile(SiteProfileBase):
    settings = django_settings.SPEEDY_MATCH_SITE_PROFILE_SETTINGS

    LOCALIZABLE_FIELDS = ('profile_description', 'city', 'children',
                          'more_children', 'match_description')

    RELATED_NAME = 'speedy_match_site_profile'

    HEIGHT_VALID_VALUES = range(settings.MIN_HEIGHT_ALLOWED,
                                settings.MAX_HEIGHT_ALLOWED + 1)
    AGE_MATCH_VALID_VALUES = range(settings.MIN_AGE_MATCH_ALLOWED,
                                   settings.MAX_AGE_MATCH_ALLOWED + 1)

    SMOKING_STATUS_UNKNOWN = 0
    SMOKING_STATUS_NO = 1
    SMOKING_STATUS_SOMETIMES = 2
    SMOKING_STATUS_YES = 3
    SMOKING_STATUS_MAX_VALUE_PLUS_ONE = 4

    SMOKING_STATUS_CHOICES_WITH_DEFAULT = (
        (SMOKING_STATUS_UNKNOWN, _("Unknown")),
        (SMOKING_STATUS_NO, _("No")),
        (SMOKING_STATUS_SOMETIMES, _("Sometimes")),
        (SMOKING_STATUS_YES, _("Yes")),
    )
    SMOKING_STATUS_VALID_CHOICES = SMOKING_STATUS_CHOICES_WITH_DEFAULT[1:]
    SMOKING_STATUS_VALID_VALUES = [
        choice[0] for choice in SMOKING_STATUS_VALID_CHOICES
    ]

    MARITAL_STATUS_UNKNOWN = 0
    MARITAL_STATUS_SINGLE = 1
    MARITAL_STATUS_DIVORCED = 2
    MARITAL_STATUS_WIDOWED = 3
    MARITAL_STATUS_IN_RELATIONSHIP = 4
    MARITAL_STATUS_IN_OPEN_RELATIONSHIP = 5
    MARITAL_STATUS_COMPLICATED = 6
    MARITAL_STATUS_SEPARATED = 7
    MARITAL_STATUS_MARRIED = 8
    MARITAL_STATUS_MAX_VALUE_PLUS_ONE = 9

    MARITAL_STATUS_CHOICES_WITH_DEFAULT = (
        (MARITAL_STATUS_UNKNOWN, _("Unknown")),
        (MARITAL_STATUS_SINGLE, _("Single")),
        (MARITAL_STATUS_DIVORCED, _("Divorced")),
        (MARITAL_STATUS_WIDOWED, _("Widowed")),
        (MARITAL_STATUS_IN_RELATIONSHIP, _("In a relatioship")),
        (MARITAL_STATUS_IN_OPEN_RELATIONSHIP, _("In an open relationship")),
        (MARITAL_STATUS_COMPLICATED, _("It's complicated")),
        (MARITAL_STATUS_SEPARATED, _("Separated")),
        (MARITAL_STATUS_MARRIED, _("Married")),
    )
    MARITAL_STATUS_VALID_CHOICES = MARITAL_STATUS_CHOICES_WITH_DEFAULT[1:]
    MARITAL_STATUS_VALID_VALUES = [
        choice[0] for choice in MARITAL_STATUS_VALID_CHOICES
    ]

    RANK_0 = 0
    RANK_1 = 1
    RANK_2 = 2
    RANK_3 = 3
    RANK_4 = 4
    RANK_5 = 5

    RANK_CHOICES = (
        (RANK_0, _("0 hearts")),
        (RANK_1, _("1 hearts")),
        (RANK_2, _("2 hearts")),
        (RANK_3, _("3 hearts")),
        (RANK_4, _("4 hearts")),
        (RANK_5, _("5 hearts")),
    )
    RANK_VALID_VALUES = [choice[0] for choice in RANK_CHOICES]

    @staticmethod
    def gender_to_match_default():
        return list()

    @staticmethod
    def diet_match_default():
        return dict(
            {str(diet): __class__.RANK_5
             for diet in User.DIET_VALID_VALUES})

    @staticmethod
    def smoking_status_match_default():
        return dict({
            str(smoking_status): __class__.RANK_5
            for smoking_status in __class__.SMOKING_STATUS_VALID_VALUES
        })

    @staticmethod
    def marital_status_match_default():
        return dict({
            str(marital_status): __class__.RANK_5
            for marital_status in __class__.MARITAL_STATUS_VALID_VALUES
        })

    @staticmethod
    def smoking_status_choices(gender):
        return (
            # (__class__.SMOKING_STATUS_UNKNOWN, _("Unknown")), # ~~~~ TODO: remove this line!
            (__class__.SMOKING_STATUS_NO,
             pgettext_lazy(context=gender, message="No")),
            (__class__.SMOKING_STATUS_SOMETIMES,
             pgettext_lazy(context=gender, message="Sometimes")),
            (__class__.SMOKING_STATUS_YES,
             pgettext_lazy(context=gender, message="Yes")),
        )

    @staticmethod
    def marital_status_choices(gender):
        return (
            # (__class__.MARITAL_STATUS_UNKNOWN, _("Unknown")), # ~~~~ TODO: remove this line!
            (__class__.MARITAL_STATUS_SINGLE,
             pgettext_lazy(context=gender, message="Single")),
            (__class__.MARITAL_STATUS_DIVORCED,
             pgettext_lazy(context=gender, message="Divorced")),
            (__class__.MARITAL_STATUS_WIDOWED,
             pgettext_lazy(context=gender, message="Widowed")),
            (__class__.MARITAL_STATUS_IN_RELATIONSHIP,
             pgettext_lazy(context=gender, message="In a relatioship")),
            (__class__.MARITAL_STATUS_IN_OPEN_RELATIONSHIP,
             pgettext_lazy(context=gender, message="In an open relationship")),
            (__class__.MARITAL_STATUS_COMPLICATED,
             pgettext_lazy(context=gender, message="It's complicated")),
            (__class__.MARITAL_STATUS_SEPARATED,
             pgettext_lazy(context=gender, message="Separated")),
            (__class__.MARITAL_STATUS_MARRIED,
             pgettext_lazy(context=gender, message="Married")),
        )

    user = models.OneToOneField(to=User,
                                verbose_name=_('user'),
                                primary_key=True,
                                on_delete=models.CASCADE,
                                related_name=RELATED_NAME)
    notify_on_like = models.PositiveIntegerField(
        verbose_name=_('on new likes'),
        choices=User.NOTIFICATIONS_CHOICES,
        default=User.NOTIFICATIONS_ON)
    active_languages = models.TextField(verbose_name=_('active languages'),
                                        blank=True)
    height = models.SmallIntegerField(verbose_name=_('height'),
                                      help_text=_('cm'),
                                      blank=True,
                                      null=True)
    # ~~~~ TODO: diet, smoking_status and marital_status - decide which model should contain them - are they relevant also to Speedy Net or only to Speedy Match?
    smoking_status = models.SmallIntegerField(
        verbose_name=_('smoking status'),
        choices=SMOKING_STATUS_CHOICES_WITH_DEFAULT,
        default=SMOKING_STATUS_UNKNOWN)
    marital_status = models.SmallIntegerField(
        verbose_name=_('marital status'),
        choices=MARITAL_STATUS_CHOICES_WITH_DEFAULT,
        default=MARITAL_STATUS_UNKNOWN)
    profile_description = TranslatedField(
        models.TextField(verbose_name=_('Few words about me'),
                         blank=True,
                         null=True))
    city = TranslatedField(
        models.CharField(verbose_name=_('city or locality'),
                         max_length=255,
                         blank=True,
                         null=True))
    children = TranslatedField(
        models.TextField(verbose_name=_('Do you have children? How many?'),
                         blank=True,
                         null=True))
    more_children = TranslatedField(
        models.TextField(verbose_name=_('Do you want (more) children?'),
                         blank=True,
                         null=True))
    match_description = TranslatedField(
        models.TextField(verbose_name=_('My ideal match'),
                         blank=True,
                         null=True))
    gender_to_match = ArrayField(models.SmallIntegerField(),
                                 verbose_name=_('Gender'),
                                 size=len(User.GENDER_VALID_VALUES),
                                 default=gender_to_match_default.__func__,
                                 blank=True,
                                 null=True)
    min_age_match = models.SmallIntegerField(
        verbose_name=_('minimal age to match'),
        default=settings.MIN_AGE_MATCH_ALLOWED)
    max_age_match = models.SmallIntegerField(
        verbose_name=_('maximal age to match'),
        default=settings.MAX_AGE_MATCH_ALLOWED)
    diet_match = JSONField(verbose_name=_('diet match'),
                           default=diet_match_default.__func__)
    smoking_status_match = JSONField(
        verbose_name=_('smoking status match'),
        default=smoking_status_match_default.__func__)
    marital_status_match = JSONField(
        verbose_name=_('marital status match'),
        default=marital_status_match_default.__func__)
    activation_step = models.PositiveSmallIntegerField(default=2)

    objects = SiteProfileManager()

    @property
    def is_active(self):
        return ((self.user.is_active)
                and (get_language() in self.get_active_languages()))

    class Meta:
        verbose_name = _('Speedy Match Profile')
        verbose_name_plural = _('Speedy Match Profiles')

    def __str__(self):
        return '{} @ Speedy Match'.format(self.user)

    def _set_active_languages(self, languages):
        languages = sorted(list(set(languages)))
        self.active_languages = ','.join(set(languages))

    def _deactivate_language(self, step):
        # Profile is invalid. Deactivate in this language.
        language_code = get_language()
        self._set_active_languages(
            set(self.get_active_languages()) - {language_code})
        self.activation_step = step
        self.user.save_user_and_profile()

    def get_active_languages(self):
        return list(
            filter(None,
                   (l.strip() for l in self.active_languages.split(','))))

    def validate_profile_and_activate(self):
        # ~~~~ TODO: all the error messages in this function may depend on the current user's (or other user's) gender.
        from speedy.match.accounts import utils
        language_code = get_language()
        error_messages = []
        for step in utils.get_steps_range():
            fields = utils.get_step_fields_to_validate(step=step)
            for field_name in fields:
                try:
                    utils.validate_field(field_name=field_name, user=self.user)
                except ValidationError as e:
                    error_messages.append(str(e))
            if (len(error_messages) > 0):
                self._deactivate_language(step=step)
                return step, error_messages
        # Registration form is complete. Check if the user has a confirmed email address.
        step = len(__class__.settings.SPEEDY_MATCH_SITE_PROFILE_FORM_FIELDS)
        if ((self.user.has_confirmed_email())
                and (step >= self.activation_step)):
            # Profile is valid. Activate in this language.
            languages = self.get_active_languages()
            if (not (language_code in languages)):
                languages.append(language_code)
                self._set_active_languages(languages=languages)
                self.user.save_user_and_profile()
        else:
            self._deactivate_language(step=self.activation_step)
            error_messages.append(_("Please confirm your email address."))
        return step, error_messages

    def call_after_verify_email_address(self):
        old_step = self.activation_step
        self.activation_step = len(
            __class__.settings.SPEEDY_MATCH_SITE_PROFILE_FORM_FIELDS)
        self.validate_profile_and_activate()
        self.activation_step = old_step
        self.user.save_user_and_profile()

    def get_matching_rank(self, other_profile, second_call=True) -> int:
        self.validate_profile_and_activate()
        try:
            other_profile.validate_profile_and_activate()
        except ValidationError as e:
            logger.error(
                "get_matching_rank::other_profile.validate_profile_and_activate() failed, other_profile.user.pk={other_user_pk}, other_profile.user.username={other_user_username}, other_profile.user.slug={other_user_slug}, e={e}"
                .format(
                    other_user_pk=other_profile.user.pk,
                    other_user_username=other_profile.user.username,
                    other_user_slug=other_profile.user.slug,
                    e=e,
                ))
            return self.__class__.RANK_0
        if (self.user.pk == other_profile.user.pk):
            return self.__class__.RANK_0
        if ((self.is_active) and (other_profile.is_active)):
            if (Block.objects.there_is_block(user_1=self.user,
                                             user_2=other_profile.user)):
                return self.__class__.RANK_0
            if (other_profile.user.gender not in self.gender_to_match):
                return self.__class__.RANK_0
            if (not (self.min_age_match <= other_profile.user.get_age() <=
                     self.max_age_match)):
                return self.__class__.RANK_0
            if (other_profile.user.diet == User.DIET_UNKNOWN):
                return self.__class__.RANK_0
            if (other_profile.smoking_status ==
                    self.__class__.SMOKING_STATUS_UNKNOWN):
                return self.__class__.RANK_0
            if (other_profile.marital_status ==
                    self.__class__.MARITAL_STATUS_UNKNOWN):
                return self.__class__.RANK_0
            diet_rank = self.diet_match.get(str(other_profile.user.diet),
                                            self.__class__.RANK_5)
            smoking_status_rank = self.smoking_status_match.get(
                str(other_profile.smoking_status), self.__class__.RANK_5)
            marital_status_rank = self.marital_status_match.get(
                str(other_profile.marital_status), self.__class__.RANK_5)
            rank = min([diet_rank, smoking_status_rank, marital_status_rank])
            if (rank > self.__class__.RANK_0) and (second_call):
                other_user_rank = other_profile.get_matching_rank(
                    other_profile=self, second_call=False)
                if (other_user_rank == self.__class__.RANK_0):
                    rank = self.__class__.RANK_0
            other_profile.rank = rank
            return rank
        else:
            return self.__class__.RANK_0

    def deactivate(self):
        self._set_active_languages([])
        self.activation_step = 0
        self.user.save_user_and_profile()

    def get_name(self):
        # Speedy Match name is user's first name.
        return self.user.get_first_name()

    def get_match_gender(self):
        if (len(self.gender_to_match) == 1):
            return User.GENDERS_DICT.get(self.gender_to_match[0])
        else:
            return User.GENDERS_DICT.get(User.GENDER_OTHER)

    def get_smoking_status_choices(self):
        return self.__class__.smoking_status_choices(
            gender=self.user.get_gender())

    def get_marital_status_choices(self):
        return self.__class__.marital_status_choices(
            gender=self.user.get_gender())

    def get_diet_match_choices(self):
        return User.diet_choices(gender=self.get_match_gender())

    def get_smoking_status_match_choices(self):
        return self.__class__.smoking_status_choices(
            gender=self.get_match_gender())

    def get_marital_status_match_choices(self):
        return self.__class__.marital_status_choices(
            gender=self.get_match_gender())
Exemple #17
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='AuctionBid',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('user_bid', models.SmallIntegerField()),
                ('bid_time', models.DateTimeField(auto_now=True)),
            ],
        ),
        migrations.CreateModel(
            name='Cart',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('number', models.PositiveSmallIntegerField()),
            ],
        ),
        migrations.CreateModel(
            name='DeliveryAddress',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('delivery_phone', models.CharField(max_length=30)),
                ('delivery_name', models.CharField(max_length=30)),
                ('address', models.CharField(max_length=255)),
                ('postcode', models.CharField(max_length=30)),
            ],
        ),
        migrations.CreateModel(
            name='Goods',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('remaining_number', models.PositiveIntegerField()),
                ('goods_name', models.CharField(max_length=255)),
                ('description', models.TextField()),
                ('category', models.CharField(blank=True, max_length=255)),
                ('status', models.CharField(choices=[('ON', 'ON SALE'), ('OFF', 'OFF SHELVES')], default='ON', max_length=20)),
                ('sale_type', models.CharField(blank=True, choices=[('OA', '仅限拍卖'), ('OB', '拍卖与一口价'), ('PB', '仅限一口价')], max_length=30)),
                ('start_bid', models.SmallIntegerField(blank=True)),
                ('current_bid', models.SmallIntegerField(blank=True)),
                ('buy_it_now_price', models.SmallIntegerField(blank=True)),
                ('image_description', models.ImageField(blank=True, upload_to='goods_image/%Y/%m/%d')),
                ('image_description_2', models.ImageField(blank=True, upload_to='goods_image/%Y/%m/%d')),
                ('image_description_3', models.ImageField(blank=True, upload_to='goods_image/%Y/%m/%d')),
                ('image_description_4', models.ImageField(blank=True, upload_to='goods_image/%Y/%m/%d')),
                ('image_description_5', models.ImageField(blank=True, upload_to='goods_image/%Y/%m/%d')),
            ],
        ),
        migrations.CreateModel(
            name='Order',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('start_time', models.DateTimeField(auto_now_add=True)),
                ('end_time', models.DateTimeField(blank=True)),
                ('status', models.CharField(choices=[('DONE', '交易完成'), ('DOING', '正在进行'), ('AB', '交易关闭')], default='DOING', max_length=20)),
                ('goods', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.Goods')),
            ],
        ),
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('user_name', models.CharField(max_length=30)),
                ('email', models.EmailField(max_length=254)),
                ('password', models.CharField(max_length=255)),
                ('real_name', models.CharField(max_length=30)),
                ('real_id', models.CharField(max_length=30)),
                ('gender', models.CharField(choices=[('M', 'Male'), ('F', 'Female')], default='M', max_length=20)),
                ('portrait', models.ImageField(blank=True, upload_to='user_portrait/')),
                ('birthday', models.DateField(blank=True)),
                ('phone', models.CharField(max_length=30)),
                ('credit', models.FloatField(default=0)),
            ],
        ),
        migrations.AddField(
            model_name='order',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.User'),
        ),
        migrations.AddField(
            model_name='goods',
            name='current_bid_buyer',
            field=models.ForeignKey(blank=True, on_delete=django.db.models.deletion.CASCADE, related_name='current_bid_buyer', to='AuctionHouse.User'),
        ),
        migrations.AddField(
            model_name='goods',
            name='vendor',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='vendor', to='AuctionHouse.User'),
        ),
        migrations.AddField(
            model_name='deliveryaddress',
            name='user_id',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.User'),
        ),
        migrations.AddField(
            model_name='cart',
            name='goods',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.Goods'),
        ),
        migrations.AddField(
            model_name='cart',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.User'),
        ),
        migrations.AddField(
            model_name='auctionbid',
            name='goods',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.Goods'),
        ),
        migrations.AddField(
            model_name='auctionbid',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='AuctionHouse.User'),
        ),
    ]
Exemple #18
0
class Feed(models.Model):
    """An RSS feed

    .. attribute:: name

        The name of the feed.

    .. attribute:: feed_url

        The URL the feed is located at.

    .. attribute:: description

        The feeds description in full text/HTML.

    .. attribute:: link

        The link the feed says it's located at.
        Can be different from :attr:`feed_url` as it's the
        source we got from the user.

    .. attribute:: date_last_refresh

        Date of the last time this feed was refreshed.

    .. attribute:: last_error

        The last error message (if any).

    .. attribute:: ratio

        The apparent importance of this feed.

    """
    supports_categories = False
    supports_enclosures = False

    name = models.CharField(_(u"name"), max_length=200)
    feed_url = models.URLField(_(u"feed URL"), unique=True)
    description = models.TextField(_(u"description"))
    link = models.URLField(_(u"link"), max_length=200, blank=True)
    http_etag = models.CharField(_(u"E-Tag"),
                                 editable=False,
                                 blank=True,
                                 null=True,
                                 max_length=200)
    http_last_modified = models.DateTimeField(_(u"Last-Modified"),
                                              null=True,
                                              editable=False,
                                              blank=True)
    date_last_refresh = models.DateTimeField(_(u"date of last refresh"),
                                             null=True,
                                             blank=True,
                                             editable=False)
    categories = models.ManyToManyField(Category)
    last_error = models.CharField(_(u"last error"),
                                  blank=True,
                                  default="",
                                  max_length=32,
                                  choices=FEED_ERROR_CHOICES)
    ratio = models.FloatField(default=0.0)
    sort = models.SmallIntegerField(_(u"sort order"), default=0)
    date_created = models.DateTimeField(_(u"date created"), auto_now_add=True)
    date_changed = models.DateTimeField(_(u"date changed"), auto_now=True)

    # this date is used to know if the feed is still used by some
    # real users. Update the value when the user use the feed.
    date_last_requested = models.DateTimeField(_(u"last requested"),
                                               auto_now_add=True)

    summary_detail_link_regex = models.CharField(
        max_length=1000,
        blank=True,
        null=True,
        help_text=_('''A regular expression to extra the link from the
            entry\'s summary detail section. This is useful when the entry\'s
            main link is a wrapper but the summary contains the true URL.'''))

    is_active = models.BooleanField(_(u"is active"), default=True)

    freq = models.IntegerField(_(u"frequency"), default=conf.REFRESH_EVERY)

    objects = FeedManager()

    class Meta:
        ordering = ("id", )
        verbose_name = _(u"feed")
        verbose_name_plural = _(u"feeds")

    def __init__(self, *args, **kwargs):
        super(Feed, self).__init__(*args, **kwargs)
        self.poststore = backend_or_default()

    def natural_key(self):
        return (self.feed_url, )

    natural_key.dependencies = []

    def __str__(self):
        return u"%s (%s)" % (self.name, self.feed_url)

    def fresh(self):
        return type(self).objects.get_fresh().filter(id=self.id).exists()

    fresh.boolean = True

    def get_posts(self, **kwargs):
        """Get all :class:`Post`s for this :class:`Feed` in order."""
        return self.poststore.all_posts_by_order(self)

    def get_post_count(self):
        return self.poststore.get_post_count(self)

    def frequencies(self, limit=None, order="-date_updated"):
        posts = self.post_set.values("date_updated").order_by(order)[0:limit]
        return [
            posts[i - 1]["date_updated"] - post["date_updated"]
            for i, post in enumerate(posts) if i
        ]

    def average_frequency(self, limit=None, min=5, default=timedelta(hours=2)):  # pylint: disable=redefined-builtin
        freqs = self.frequencies(limit=limit)
        if len(freqs) < min:
            return default
        average = sum(map(timedelta_seconds, freqs)) / len(freqs)
        return timedelta(seconds=average)

    def update_frequency(self, limit=None, min=5, save=True):  # pylint: disable=redefined-builtin
        self.freq = timedelta_seconds(self.average_frequency(limit, min))
        if save:
            self.save()

    def expire_old_posts(self, min_posts=30, max_posts=120):
        """Expire old posts.

        :keyword min_posts: Minimum number of post by feed.

        :keyword max_posts: The maximum number of posts to keep for a feed.
            We keep this value high to avoid incessant delete on feed that
            have a bit more than the `min_posts` value.
        :keyword commit: Commit the transaction, set to ``False`` if you want
            to manually handle the transaction.

        :returns: The number of messages deleted.

        """
        by_date = self.post_set.order_by("-date_published")
        if len(by_date) > max_posts:
            expired_posts = [
                post["id"] for post in by_date.values("id")[min_posts:]
            ]
            Post.objects.filter(pk__in=expired_posts).delete()
            return len(expired_posts)
        return 0

    def is_error_status(self, status):
        return status == http.NOT_FOUND or status not in ACCEPTED_STATUSES

    def error_for_status(self, status):
        if status == http.NOT_FOUND:
            return FEED_NOT_FOUND_ERROR
        if status not in ACCEPTED_STATUSES:
            return FEED_GENERIC_ERROR

    def save_error(self, error_msg):
        self._set_last_error = True
        self.last_error = error_msg
        self.save()
        return self

    def save_generic_error(self):
        return self.save_error(FEED_GENERIC_ERROR)

    def save_timeout_error(self):
        return self.save_error(FEED_TIMEDOUT_ERROR)

    def set_error_status(self, status):
        return self.save_error(self.error_for_status(status))

    @property
    def date_last_refresh_naturaldate(self):
        return text_type(naturaldate(self.date_last_refresh))
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('contenttypes', '0002_remove_content_type_name'),
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Course',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('catalog_number', models.CharField(max_length=20, verbose_name='Number')),
                ('title', models.CharField(max_length=256, verbose_name='Title')),
                ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')),
                ('credits_earned', models.DecimalField(decimal_places=1, max_digits=2, verbose_name='Credits')),
                ('graduate', models.BooleanField(default=False, verbose_name='Graduate Level')),
            ],
            options={
                'ordering': ['major', 'catalog_number', 'title'],
            },
        ),
        migrations.CreateModel(
            name='Interval',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('interval_amount', models.IntegerField(validators=[django.core.validators.MinValueValidator(1)], verbose_name='Interval Amount')),
                ('interval_type', models.CharField(choices=[('weeks', 'weeks'), ('days', 'days'), ('months', 'months'), ('minutes', 'minutes'), ('hours', 'hours'), ('seconds', 'seconds')], max_length=7, verbose_name='Interval Type')),
            ],
        ),
        migrations.CreateModel(
            name='Major',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('abbreviation', sis.models.UpperField(max_length=6, unique=True, verbose_name='Abbreviation')),
                ('title', models.CharField(max_length=256, verbose_name='Title')),
                ('description', models.CharField(blank=True, max_length=256, verbose_name='Description')),
            ],
            options={
                'ordering': ['abbreviation'],
            },
        ),
        migrations.CreateModel(
            name='Professor',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('major', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.major')),
            ],
            options={
                'ordering': ['profile__user__username'],
            },
        ),
        migrations.CreateModel(
            name='Profile',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('role', models.CharField(choices=[('A', 'Admin'), ('P', 'Professor'), ('S', 'Student'), ('-', 'NO ACCESS')], default='-', max_length=1)),
                ('bio', models.CharField(blank=True, max_length=256)),
                ('demo_age', models.CharField(blank=True, choices=[('Under 18', 'Under 18'), ('18-21', '18-21'), ('22-25', '22-25'), ('26-30', '26-30'), ('31-40', '31-40'), ('41-54', '41-54'), ('55-64', '55-64'), ('65 or over', '65 or over'), ('Decline to State', 'Decline to State')], max_length=20, verbose_name='Age Group')),
                ('demo_race', models.CharField(blank=True, choices=[('White/Caucasian', 'White/Caucasian'), ('Native Hawaiian or Pacific Islander', 'Native Hawaiian or Pacific Islander'), ('Hispanic', 'Hispanic'), ('Black', 'Black'), ('American Indian/Alaska Native', 'American Indian/Alaska Native'), ('Decline to State', 'Decline to State')], max_length=40)),
                ('demo_gender', models.CharField(blank=True, choices=[('Male', 'Male'), ('Female', 'Female'), ('Trans', 'Trans'), ('Non-Binary', 'Non-Binary'), ('Other', 'Other'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_employment', models.CharField(blank=True, choices=[('Full Time Student', 'Full Time Student'), ('Part Time', 'Part Time'), ('Full Time', 'Full Time'), ('Unemployed/Seeking', 'Unemployed/Seeking'), ('Retired', 'Retired'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_income', models.CharField(blank=True, choices=[('Under $40K', 'Under $40K'), ('$40K-$80K', '$40K-$80K'), ('$80K-$150K', '$80K-$150K'), ('$150K+', '$150K+'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_education', models.CharField(blank=True, choices=[('partial High School', 'partial High School'), ('High School Diploma', 'High School Diploma'), ('college without degree awarded', 'college without degree awarded'), ('Associates', 'Associates'), ('College Bachelors', 'College Bachelors'), ('Masters', 'Masters'), ('Doctorate', 'Doctorate'), ('Decline to State', 'Decline to State')], max_length=35)),
                ('demo_orientation', models.CharField(blank=True, choices=[('Heterosexual', 'Heterosexual'), ('Lesbian/Gay', 'Lesbian/Gay'), ('Bisexual', 'Bisexual'), ('Other', 'Other'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_marital', models.CharField(blank=True, choices=[('Single', 'Single'), ('Married', 'Married'), ('Divorced', 'Divorced'), ('Widowed', 'Widowed'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_disability', models.CharField(blank=True, choices=[('None', 'None'), ('Physical', 'Physical'), ('Emotional', 'Emotional'), ('Mental', 'Mental'), ('Other', 'Other'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_veteran', models.CharField(blank=True, choices=[('None', 'None'), ('Veteran', 'Veteran'), ('Decline to State', 'Decline to State')], max_length=20)),
                ('demo_citizenship', models.CharField(blank=True, choices=[('United States', 'United States'), ('US Permanent Resident', 'US Permanent Resident'), ('Visa', 'Visa'), ('Other', 'Other'), ('Decline to State', 'Decline to State')], max_length=25)),
                ('user', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'ordering': ['user__username'],
            },
        ),
        migrations.CreateModel(
            name='ReferenceItem',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=256, verbose_name='Title')),
                ('description', models.CharField(blank=True, max_length=256, null=True, verbose_name='Description')),
                ('link', models.CharField(blank=True, max_length=256, null=True, verbose_name='Link')),
                ('edition', models.CharField(blank=True, max_length=256, null=True, verbose_name='Edition')),
                ('type', models.CharField(choices=[('req', 'Required'), ('opt', 'Optional'), ('rec', 'Recommended'), ('syl', 'Syllabus'), ('ass', 'Assignment')], default='req', max_length=3, verbose_name='Type')),
                ('isbn', isbn_field.fields.ISBNField(blank=True, max_length=28, validators=[isbn_field.validators.ISBNValidator], verbose_name='ISBN')),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.course')),
                ('professor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.professor')),
            ],
            options={
                'unique_together': {('course', 'professor', 'title')},
            },
        ),
        migrations.CreateModel(
            name='Section',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('number', models.IntegerField(default=1, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Section Number')),
                ('capacity', models.IntegerField(default=0, validators=[django.core.validators.MinValueValidator(1)], verbose_name='Capacity')),
                ('location', models.CharField(max_length=256, verbose_name='Location')),
                ('hours', models.CharField(max_length=256, verbose_name='Hours')),
                ('status', models.CharField(choices=[('Closed', 'Closed'), ('Open', 'Open'), ('In Progress', 'In Progress'), ('Grading', 'Grading'), ('Graded', 'Graded'), ('Cancelled', 'Cancelled')], default='Closed', max_length=20, verbose_name='Section Status')),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.course')),
                ('professor', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.professor')),
            ],
            options={
                'ordering': ['semester', 'course', 'number'],
            },
        ),
        migrations.CreateModel(
            name='Semester',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('date_registration_opens', models.DateField(verbose_name='Registration Opens')),
                ('date_registration_closes', models.DateField(help_text='Must be on or after Registration Opens', verbose_name='Registration Closes')),
                ('date_started', models.DateField(help_text='Must on or after Registration Opens', verbose_name='Classes Start')),
                ('date_last_drop', models.DateField(help_text='Must be on or after Classes Start and before Classes End', verbose_name='Last Drop')),
                ('date_ended', models.DateField(help_text='Must be on or after Classes Start', verbose_name='Classes End')),
                ('date_finalized', models.DateField(help_text='Must be on or after Classes End', verbose_name='Grades Finalized')),
                ('session', models.CharField(choices=[('FA', 'Fall'), ('WI', 'Winter'), ('SP', 'Spring'), ('SU', 'Summer')], default='FA', max_length=6, verbose_name='semester')),
                ('year', models.IntegerField(default=2000, help_text='School Year', validators=[django.core.validators.MinValueValidator(1900), django.core.validators.MaxValueValidator(2300)], verbose_name='year')),
            ],
            options={
                'ordering': ['date_started'],
                'unique_together': {('session', 'year')},
            },
        ),
        migrations.CreateModel(
            name='SemesterStudent',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('grade_points', models.FloatField(null=True, verbose_name='Grade Points')),
                ('credits_attempted', models.DecimalField(decimal_places=1, default=Decimal('0.0'), max_digits=3, verbose_name='Attempted')),
                ('credits_earned', models.DecimalField(decimal_places=1, max_digits=3, null=True, verbose_name='Earned')),
                ('semester', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.semester')),
            ],
            options={
                'ordering': ['semester', 'student'],
            },
        ),
        migrations.CreateModel(
            name='Tasks',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('task_id', models.IntegerField()),
                ('task_type', models.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to='contenttypes.contenttype')),
            ],
        ),
        migrations.CreateModel(
            name='Student',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('grad_student', models.BooleanField(default=False, verbose_name='Graduate Student')),
                ('gpa', models.FloatField(null=True, verbose_name='GPA')),
                ('credits_earned', models.DecimalField(decimal_places=1, max_digits=4, null=True, verbose_name='Earned')),
                ('major', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.major')),
                ('profile', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='sis.profile')),
                ('semesters', models.ManyToManyField(related_name='semester_students', through='sis.SemesterStudent', to='sis.Semester')),
            ],
            options={
                'ordering': ['profile__user__username'],
            },
        ),
        migrations.AddField(
            model_name='semesterstudent',
            name='student',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.student'),
        ),
        migrations.CreateModel(
            name='SectionStudent',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('grade', models.SmallIntegerField(blank=True, choices=[(4, 'A'), (3, 'B'), (2, 'C'), (1, 'D'), (0, 'F')], default=None, null=True)),
                ('status', models.CharField(choices=[('Registered', 'Registered'), ('In Progress', 'In Progress'), ('Done', 'Done'), ('Graded', 'Graded'), ('Drop Requested', 'Drop Requested'), ('Dropped', 'Dropped')], default='Registered', max_length=20, verbose_name='Student Status')),
                ('section', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.section')),
                ('student', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.student')),
            ],
            options={
                'ordering': ['section', 'student'],
                'unique_together': {('section', 'student')},
            },
        ),
        migrations.AddField(
            model_name='section',
            name='semester',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.semester'),
        ),
        migrations.AddField(
            model_name='section',
            name='students',
            field=models.ManyToManyField(related_name='section_students', through='sis.SectionStudent', to='sis.Student'),
        ),
        migrations.AddField(
            model_name='professor',
            name='profile',
            field=models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='sis.profile'),
        ),
        migrations.CreateModel(
            name='Message',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('message_type', models.CharField(choices=[('generic', 'generic'), ('probation', 'probation'), ('droprequest', 'droprequest'), ('majorchange', 'majorchange'), ('sectionfilling', 'sectionfilling'), ('sectionfull', 'sectionfull'), ('sectionadded', 'sectionadded'), ('reqtranscript', 'reqtranscript'), ('transcript', 'transcript'), ('reply', 'reply')], default='generic', max_length=15)),
                ('time_sent', models.DateTimeField(editable=False, verbose_name='Sent at')),
                ('time_read', models.DateTimeField(blank=True, null=True, verbose_name='Read at')),
                ('time_archived', models.DateTimeField(blank=True, null=True, verbose_name='Archived at')),
                ('time_sender_archived', models.DateTimeField(blank=True, null=True, verbose_name='Sender Archived at')),
                ('time_handled', models.DateTimeField(blank=True, null=True, verbose_name='Handled at')),
                ('subject', models.CharField(max_length=256)),
                ('body', models.TextField(blank=True, null=True)),
                ('high_priority', models.BooleanField(default=False)),
                ('support_data', models.JSONField(default=dict)),
                ('in_response_to', models.ForeignKey(blank=True, null=True, on_delete=django.db.models.deletion.SET_NULL, to='sis.message')),
                ('recipient', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_to', to='sis.profile', verbose_name='Recipient')),
                ('sender', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='sent_by', to='sis.profile', verbose_name='Sender')),
            ],
            options={
                'ordering': ['time_sent'],
            },
        ),
        migrations.AddField(
            model_name='major',
            name='contact',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.SET_NULL, to='sis.profile'),
        ),
        migrations.AddField(
            model_name='major',
            name='courses_required',
            field=models.ManyToManyField(blank=True, related_name='required_by', to='sis.Course'),
        ),
        migrations.AddField(
            model_name='major',
            name='professors',
            field=models.ManyToManyField(blank=True, related_name='prof', to='sis.Professor'),
        ),
        migrations.CreateModel(
            name='CoursePrerequisite',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='a_course', to='sis.course')),
                ('prerequisite', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='a_prerequisite', to='sis.course')),
            ],
            options={
                'ordering': ['course', 'prerequisite'],
                'unique_together': {('course', 'prerequisite')},
            },
        ),
        migrations.AddField(
            model_name='course',
            name='major',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.major'),
        ),
        migrations.AddField(
            model_name='course',
            name='prereqs',
            field=models.ManyToManyField(through='sis.CoursePrerequisite', to='sis.Course'),
        ),
        migrations.CreateModel(
            name='AcademicProbationTask',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('date', models.DateField(blank=True, default=None, null=True, verbose_name='Date')),
                ('frequency_type', models.CharField(choices=[('immediate', 'immediate'), ('interval', 'interval'), ('date', 'date')], max_length=9, verbose_name='Frequency Type')),
                ('title', models.CharField(blank=True, max_length=30, verbose_name='Task Title')),
                ('active', models.BooleanField(default=True, verbose_name='Active')),
                ('description', models.CharField(max_length=256, verbose_name='Description')),
                ('interval', models.OneToOneField(blank=True, null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.interval')),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.AlterUniqueTogether(
            name='semesterstudent',
            unique_together={('semester', 'student')},
        ),
        migrations.CreateModel(
            name='SectionReferenceItem',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('index', models.IntegerField(default=1, verbose_name='#')),
                ('item', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='sis.referenceitem')),
                ('section', models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='sis.section')),
            ],
            options={
                'unique_together': {('section', 'item'), ('section', 'index')},
            },
        ),
        migrations.AlterUniqueTogether(
            name='section',
            unique_together={('course', 'semester', 'number')},
        ),
        migrations.AlterUniqueTogether(
            name='course',
            unique_together={('major', 'catalog_number')},
        ),
    ]
class AllFields(models.Model):
    # basics
    field_int = models.IntegerField()
    field_float = models.FloatField()
    field_bool = models.BooleanField()
    field_char = models.CharField(max_length=100)
    field_text = models.TextField()
    # special
    field_slug = models.SlugField()
    field_email = models.EmailField()
    field_uuid = models.UUIDField()
    field_url = models.URLField()
    if models.IPAddressField in serializers.ModelSerializer.serializer_field_mapping:
        field_ip = models.IPAddressField()
    else:
        field_ip = models.GenericIPAddressField(protocol='ipv6')
    field_ip_generic = models.GenericIPAddressField(protocol='ipv6')
    field_decimal = models.DecimalField(max_digits=6, decimal_places=3)
    field_file = models.FileField(storage=fs)
    field_img = models.ImageField(storage=fs)
    field_date = models.DateField()
    field_datetime = models.DateTimeField()
    field_bigint = models.BigIntegerField()
    field_smallint = models.SmallIntegerField()
    field_posint = models.PositiveIntegerField()
    field_possmallint = models.PositiveSmallIntegerField()
    field_nullbool = models.NullBooleanField()
    field_time = models.TimeField()
    field_duration = models.DurationField()

    # relations
    field_foreign = models.ForeignKey(Aux, on_delete=models.CASCADE, help_text='main aux object')
    field_m2m = models.ManyToManyField(Aux, help_text='set of related aux objects')
    field_o2o = models.OneToOneField(Aux, on_delete=models.CASCADE, help_text='bound aux object')
    # overrides
    field_regex = models.CharField(max_length=50)
    field_bool_override = models.BooleanField()

    if DJANGO_VERSION >= '3.1':
        field_json = models.JSONField()
    else:
        @property
        def field_json(self):
            return {'A': 1, 'B': 2}

    @property
    def field_model_property_float(self) -> float:
        return 1.337

    @property
    def field_list(self):
        return [1.1, 2.2, 3.3]

    @property
    def field_list_object(self):
        return self.field_m2m.all()

    def model_function_basic(self) -> bool:
        return True

    def model_function_model(self) -> Aux:
        return self.field_foreign
Exemple #21
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('utils', '0001_initial'),
        ('bookings', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='AdditionalInfo',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('title', models.CharField(max_length=100)),
                ('description', models.CharField(max_length=200)),
            ],
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('parent_id', models.PositiveIntegerField()),
                ('name', models.CharField(max_length=50, unique=True)),
                ('description', models.CharField(max_length=200)),
                ('image',
                 models.ImageField(blank=True,
                                   upload_to='locations/pictures')),
            ],
        ),
        migrations.CreateModel(
            name='Group',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
            ],
        ),
        migrations.CreateModel(
            name='Image',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('image_url',
                 models.ImageField(upload_to='locations/pictures',
                                   verbose_name='Image of a location')),
                ('title', models.CharField(max_length=100)),
                ('description', models.CharField(max_length=200)),
            ],
        ),
        migrations.CreateModel(
            name='Location',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name',
                 models.CharField(max_length=40,
                                  verbose_name='location name')),
                ('description',
                 models.TextField(max_length=2000,
                                  verbose_name='location description')),
                ('address',
                 models.CharField(max_length=50,
                                  verbose_name='local address')),
                ('contact_email',
                 models.EmailField(max_length=30,
                                   verbose_name='contact email')),
                ('price',
                 models.FloatField(help_text='Daily cost of rent in USD',
                                   max_length=10,
                                   verbose_name='location price')),
                ('contact_phone',
                 models.CharField(
                     max_length=16,
                     validators=[
                         django.core.validators.RegexValidator(
                             message=
                             'Phone number must be entered in the format : +999999999. Up to 15 digits allowed.',
                             regex='^\\+?\\d{9,15}$')
                     ])),
                ('main_image',
                 models.ImageField(null=True,
                                   upload_to='locations/pictures',
                                   verbose_name='Main picture of a location')),
                ('latitude',
                 models.FloatField(max_length=20, verbose_name='latitude')),
                ('longitude',
                 models.FloatField(max_length=20, verbose_name='longitude')),
                ('is_active',
                 models.BooleanField(
                     default=False,
                     help_text='If active, can be listed for rent',
                     verbose_name='active location')),
                ('has_parking',
                 models.BooleanField(default=False,
                                     help_text='Location has parking space',
                                     verbose_name='parking')),
                ('has_dressing_room',
                 models.BooleanField(
                     default=False,
                     help_text='Location has dressing room space',
                     verbose_name='dressing room')),
                ('has_bathroom',
                 models.BooleanField(default=False,
                                     help_text='Location has bathroom',
                                     verbose_name='bathroom')),
                ('has_cattering',
                 models.BooleanField(default=False,
                                     help_text='Location has cattering space',
                                     verbose_name='cattering')),
                ('has_wifi',
                 models.BooleanField(default=False,
                                     help_text='Location has wifi available',
                                     verbose_name='wifi')),
                ('is_verified',
                 models.BooleanField(
                     default=False,
                     help_text=
                     'locations has to be verified before listed for rent',
                     verbose_name='verified location')),
                ('categories',
                 models.ManyToManyField(through='locations.Group',
                                        to='locations.Category')),
                ('city',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='utils.city')),
            ],
        ),
        migrations.CreateModel(
            name='Rating',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('rating_date',
                 models.DateTimeField(verbose_name='Rating date')),
                ('accesibility',
                 models.SmallIntegerField(
                     default=0, verbose_name='Accesibility of location')),
                ('conditions',
                 models.SmallIntegerField(
                     default=0, verbose_name='Conditions of location')),
                ('average',
                 models.SmallIntegerField(
                     default=0,
                     verbose_name='value for money of the location')),
                ('description',
                 models.CharField(
                     max_length=2000,
                     null=True,
                     verbose_name=
                     'Observations about the experience of the user')),
                ('booking_id',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='bookings.booking')),
                ('location_id',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='locations.location')),
            ],
        ),
    ]
Exemple #22
0
class ReviewerScore(ModelBase):
    id = PositiveAutoField(primary_key=True)
    user = models.ForeignKey(
        UserProfile, related_name='_reviewer_scores', on_delete=models.CASCADE)
    addon = models.ForeignKey(
        Addon, blank=True, null=True, related_name='+',
        on_delete=models.CASCADE)
    version = models.ForeignKey(
        Version, blank=True, null=True, related_name='+',
        on_delete=models.CASCADE)
    score = models.IntegerField()
    # For automated point rewards.
    note_key = models.SmallIntegerField(choices=amo.REVIEWED_CHOICES.items(),
                                        default=0)
    # For manual point rewards with a note.
    note = models.CharField(max_length=255)

    class Meta:
        db_table = 'reviewer_scores'
        ordering = ('-created',)
        indexes = [
            models.Index(fields=('addon',),
                         name='reviewer_scores_addon_id_fk'),
            models.Index(fields=('created',),
                         name='reviewer_scores_created_idx'),
            models.Index(fields=('user',),
                         name='reviewer_scores_user_id_idx'),
            models.Index(fields=('version',),
                         name='reviewer_scores_version_id'),
        ]

    @classmethod
    def get_key(cls, key=None, invalidate=False):
        namespace = 'riscore'
        if not key:  # Assuming we're invalidating the namespace.
            cache_ns_key(namespace, invalidate)
            return
        else:
            # Using cache_ns_key so each cache val is invalidated together.
            ns_key = cache_ns_key(namespace, invalidate)
            return '%s:%s' % (ns_key, key)

    @classmethod
    def get_event(cls, addon, status, version=None, post_review=False,
                  content_review=False):
        """Return the review event type constant.

        This is determined by the addon.type and the queue the addon is
        currently in (which is determined from the various parameters sent
        down from award_points()).

        Note: We're not using addon.status or addon.current_version because
        this is called after the status/current_version might have been updated
        by the reviewer action.

        """
        reviewed_score_name = None
        if content_review:
            # Content review always gives the same amount of points.
            reviewed_score_name = 'REVIEWED_CONTENT_REVIEW'
        elif post_review:
            # There are 4 tiers of post-review scores depending on the addon
            # weight.
            try:
                if version is None:
                    raise AutoApprovalSummary.DoesNotExist
                weight = version.autoapprovalsummary.weight
            except AutoApprovalSummary.DoesNotExist as exception:
                log.exception(
                    'No such version/auto approval summary when determining '
                    'event type to award points: %r', exception)
                weight = 0

            if addon.type == amo.ADDON_DICT:
                reviewed_score_name = 'REVIEWED_DICT_FULL'
            elif addon.type in [amo.ADDON_LPAPP, amo.ADDON_LPADDON]:
                reviewed_score_name = 'REVIEWED_LP_FULL'
            elif addon.type == amo.ADDON_SEARCH:
                reviewed_score_name = 'REVIEWED_SEARCH_FULL'
            elif weight > amo.POST_REVIEW_WEIGHT_HIGHEST_RISK:
                reviewed_score_name = 'REVIEWED_EXTENSION_HIGHEST_RISK'
            elif weight > amo.POST_REVIEW_WEIGHT_HIGH_RISK:
                reviewed_score_name = 'REVIEWED_EXTENSION_HIGH_RISK'
            elif weight > amo.POST_REVIEW_WEIGHT_MEDIUM_RISK:
                reviewed_score_name = 'REVIEWED_EXTENSION_MEDIUM_RISK'
            else:
                reviewed_score_name = 'REVIEWED_EXTENSION_LOW_RISK'
        else:
            if status == amo.STATUS_NOMINATED:
                queue = 'FULL'
            elif status == amo.STATUS_APPROVED:
                queue = 'UPDATE'
            else:
                queue = ''

            if (addon.type in [amo.ADDON_EXTENSION, amo.ADDON_PLUGIN,
                               amo.ADDON_API] and queue):
                reviewed_score_name = 'REVIEWED_ADDON_%s' % queue
            elif addon.type == amo.ADDON_DICT and queue:
                reviewed_score_name = 'REVIEWED_DICT_%s' % queue
            elif addon.type in [amo.ADDON_LPAPP, amo.ADDON_LPADDON] and queue:
                reviewed_score_name = 'REVIEWED_LP_%s' % queue
            elif addon.type == amo.ADDON_STATICTHEME:
                reviewed_score_name = 'REVIEWED_STATICTHEME'
            elif addon.type == amo.ADDON_SEARCH and queue:
                reviewed_score_name = 'REVIEWED_SEARCH_%s' % queue

        if reviewed_score_name:
            return getattr(amo, reviewed_score_name)
        return None

    @classmethod
    def award_points(cls, user, addon, status, version=None,
                     post_review=False, content_review=False,
                     extra_note=''):
        """Awards points to user based on an event and the queue.

        `event` is one of the `REVIEWED_` keys in constants.
        `status` is one of the `STATUS_` keys in constants.
        `version` is the `Version` object that was affected by the review.
        `post_review` is set to True if the add-on was auto-approved and the
                      reviewer is confirming/rejecting post-approval.
        `content_review` is set to True if it's a content-only review of an
                         auto-approved add-on.

        """

        # If a webextension file gets approved manually (e.g. because
        # auto-approval is disabled), 'post-review' is set to False, treating
        # the file as a legacy file which is not what we want. The file is
        # still a webextension and should treated as such, regardless of
        # auto-approval being disabled or not.
        # As a hack, we set 'post_review' to True.
        if (version and
                version.is_webextension and
                addon.type in amo.GROUP_TYPE_ADDON):
            post_review = True

        user_log.info(
            (u'Determining award points for user %s for version %s of addon %s'
             % (user, version, addon.id)).encode('utf-8'))

        event = cls.get_event(
            addon, status, version=version, post_review=post_review,
            content_review=content_review)
        score = amo.REVIEWED_SCORES.get(event)

        user_log.info(
            (u'Determined %s award points (event: %s) for user %s for version '
             u'%s of addon %s' % (score, event, user, version, addon.id))
            .encode('utf-8'))

        # Add bonus to reviews greater than our limit to encourage fixing
        # old reviews. Does not apply to content-review/post-review at the
        # moment, because it would need to be calculated differently.
        award_overdue_bonus = (
            version and version.nomination and
            not post_review and not content_review)
        if award_overdue_bonus:
            waiting_time_days = (datetime.now() - version.nomination).days
            days_over = waiting_time_days - amo.REVIEWED_OVERDUE_LIMIT
            if days_over > 0:
                bonus = days_over * amo.REVIEWED_OVERDUE_BONUS
                score = score + bonus

        if score is not None:
            cls.objects.create(user=user, addon=addon, score=score,
                               note_key=event, note=extra_note,
                               version=version)
            cls.get_key(invalidate=True)
            user_log.info(
                (u'Awarding %s points to user %s for "%s" for addon %s' % (
                    score, user, amo.REVIEWED_CHOICES[event], addon.id))
                .encode('utf-8'))
        return score

    @classmethod
    def award_moderation_points(cls, user, addon, review_id, undo=False):
        """Awards points to user based on moderated review."""
        event = (amo.REVIEWED_ADDON_REVIEW if not undo else
                 amo.REVIEWED_ADDON_REVIEW_POORLY)
        score = amo.REVIEWED_SCORES.get(event)

        cls.objects.create(user=user, addon=addon, score=score, note_key=event)
        cls.get_key(invalidate=True)
        user_log.info(
            u'Awarding %s points to user %s for "%s" for review %s' % (
                score, user, amo.REVIEWED_CHOICES[event], review_id))

    @classmethod
    def get_total(cls, user):
        """Returns total points by user."""
        key = cls.get_key('get_total:%s' % user.id)
        val = cache.get(key)
        if val is not None:
            return val

        val = list(ReviewerScore.objects.filter(user=user)
                                        .aggregate(total=Sum('score'))
                                        .values())[0]
        if val is None:
            val = 0

        cache.set(key, val, None)
        return val

    @classmethod
    def get_recent(cls, user, limit=5, addon_type=None):
        """Returns most recent ReviewerScore records."""
        key = cls.get_key('get_recent:%s' % user.id)
        val = cache.get(key)
        if val is not None:
            return val

        val = ReviewerScore.objects.filter(user=user)
        if addon_type is not None:
            val.filter(addon__type=addon_type)

        val = list(val[:limit])
        cache.set(key, val, None)
        return val

    @classmethod
    def get_breakdown(cls, user):
        """Returns points broken down by addon type."""
        key = cls.get_key('get_breakdown:%s' % user.id)
        val = cache.get(key)
        if val is not None:
            return val

        sql = """
             SELECT `reviewer_scores`.*,
                    SUM(`reviewer_scores`.`score`) AS `total`,
                    `addons`.`addontype_id` AS `atype`
             FROM `reviewer_scores`
             LEFT JOIN `addons` ON (`reviewer_scores`.`addon_id`=`addons`.`id`)
             WHERE `reviewer_scores`.`user_id` = %s
             GROUP BY `addons`.`addontype_id`
             ORDER BY `total` DESC
        """
        val = list(ReviewerScore.objects.raw(sql, [user.id]))
        cache.set(key, val, None)
        return val

    @classmethod
    def get_breakdown_since(cls, user, since):
        """
        Returns points broken down by addon type since the given datetime.
        """
        key = cls.get_key('get_breakdown:%s:%s' % (user.id, since.isoformat()))
        val = cache.get(key)
        if val is not None:
            return val

        sql = """
             SELECT `reviewer_scores`.*,
                    SUM(`reviewer_scores`.`score`) AS `total`,
                    `addons`.`addontype_id` AS `atype`
             FROM `reviewer_scores`
             LEFT JOIN `addons` ON (`reviewer_scores`.`addon_id`=`addons`.`id`)
             WHERE `reviewer_scores`.`user_id` = %s AND
                   `reviewer_scores`.`created` >= %s
             GROUP BY `addons`.`addontype_id`
             ORDER BY `total` DESC
        """
        val = list(ReviewerScore.objects.raw(sql, [user.id, since]))
        cache.set(key, val, 3600)
        return val

    @classmethod
    def _leaderboard_list(cls, since=None, types=None, addon_type=None):
        """
        Returns base leaderboard list. Each item will be a tuple containing
        (user_id, name, total).
        """

        reviewers = (UserProfile.objects
                                .filter(groups__name__startswith='Reviewers: ')
                                .exclude(groups__name__in=('Staff', 'Admins',
                                         'No Reviewer Incentives'))
                                .distinct())
        qs = (cls.objects
                 .values_list('user__id')
                 .filter(user__in=reviewers)
                 .annotate(total=Sum('score'))
                 .order_by('-total'))

        if since is not None:
            qs = qs.filter(created__gte=since)

        if types is not None:
            qs = qs.filter(note_key__in=types)

        if addon_type is not None:
            qs = qs.filter(addon__type=addon_type)

        users = {reviewer.pk: reviewer for reviewer in reviewers}
        return [
            (item[0], users.get(item[0], UserProfile()).name, item[1])
            for item in qs]

    @classmethod
    def get_leaderboards(cls, user, days=7, types=None, addon_type=None):
        """Returns leaderboards with ranking for the past given days.

        This will return a dict of 3 items::

            {'leader_top': [...],
             'leader_near: [...],
             'user_rank': (int)}

        If the user is not in the leaderboard, or if the user is in the top 5,
        'leader_near' will be an empty list and 'leader_top' will contain 5
        elements instead of the normal 3.

        """
        key = cls.get_key('get_leaderboards:%s' % user.id)
        val = cache.get(key)
        if val is not None:
            return val

        week_ago = date.today() - timedelta(days=days)

        leader_top = []
        leader_near = []

        leaderboard = cls._leaderboard_list(
            since=week_ago, types=types, addon_type=addon_type)

        scores = []

        user_rank = 0
        in_leaderboard = False
        for rank, row in enumerate(leaderboard, 1):
            user_id, name, total = row
            scores.append({
                'user_id': user_id,
                'name': name,
                'rank': rank,
                'total': int(total),
            })
            if user_id == user.id:
                user_rank = rank
                in_leaderboard = True

        if not in_leaderboard:
            leader_top = scores[:5]
        else:
            if user_rank <= 5:  # User is in top 5, show top 5.
                leader_top = scores[:5]
            else:
                leader_top = scores[:3]
                leader_near = [scores[user_rank - 2], scores[user_rank - 1]]
                try:
                    leader_near.append(scores[user_rank])
                except IndexError:
                    pass  # User is last on the leaderboard.

        val = {
            'leader_top': leader_top,
            'leader_near': leader_near,
            'user_rank': user_rank,
        }
        cache.set(key, val, None)
        return val

    @classmethod
    def all_users_by_score(cls):
        """
        Returns reviewers ordered by highest total points first.
        """
        leaderboard = cls._leaderboard_list()
        scores = []

        for row in leaderboard:
            user_id, name, total = row
            user_level = len(amo.REVIEWED_LEVELS) - 1
            for i, level in enumerate(amo.REVIEWED_LEVELS):
                if total < level['points']:
                    user_level = i - 1
                    break

            # Only show level if it changes.
            if user_level < 0:
                level = ''
            else:
                level = str(amo.REVIEWED_LEVELS[user_level]['name'])

            scores.append({
                'user_id': user_id,
                'name': name,
                'total': int(total),
                'level': level,
            })

        prev = None
        for score in reversed(scores):
            if score['level'] == prev:
                score['level'] = ''
            else:
                prev = score['level']

        return scores
Exemple #23
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('contenttypes', '0002_remove_content_type_name'),
    ]

    operations = [
        migrations.CreateModel(
            name='Course',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=128, unique=True)),
                ('course_img', models.CharField(max_length=255)),
                ('course_type', models.SmallIntegerField(choices=[(0, '付费'), (1, 'VIP专享'), (2, '学位课程')])),
                ('brief', models.TextField(max_length=2048, verbose_name='课程概述')),
                ('level', models.SmallIntegerField(choices=[(0, '初级'), (1, '中级'), (2, '高级')], default=1)),
                ('pub_date', models.DateField(blank=True, null=True, verbose_name='发布日期')),
                ('period', models.PositiveIntegerField(default=7, verbose_name='建议学习周期(days)')),
                ('order', models.IntegerField(help_text='从上一个课程数字往后排', verbose_name='课程顺序')),
                ('attachment_path', models.CharField(blank=True, max_length=128, null=True, verbose_name='课件路径')),
                ('status', models.SmallIntegerField(choices=[(0, '上线'), (1, '下线'), (2, '预上线')], default=0)),
                ('template_id', models.SmallIntegerField(default=1, verbose_name='前端模板id')),
            ],
            options={
                'verbose_name_plural': '06.专题课或学位课模块',
            },
        ),
        migrations.CreateModel(
            name='CourseCategory',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=64, unique=True)),
            ],
            options={
                'verbose_name_plural': '01.课程大类',
            },
        ),
        migrations.CreateModel(
            name='CourseChapter',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('chapter', models.SmallIntegerField(default=1, verbose_name='第几章')),
                ('name', models.CharField(max_length=128)),
                ('summary', models.TextField(blank=True, null=True, verbose_name='章节介绍')),
                ('pub_date', models.DateField(auto_now_add=True, verbose_name='发布日期')),
                ('course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='coursechapters', to='api.Course')),
            ],
            options={
                'verbose_name_plural': '10. 课程章节',
            },
        ),
        migrations.CreateModel(
            name='CourseDetail',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('hours', models.IntegerField(verbose_name='课时')),
                ('course_slogan', models.CharField(blank=True, max_length=125, null=True)),
                ('video_brief_link', models.CharField(blank=True, max_length=255, null=True, verbose_name='课程介绍')),
                ('why_study', models.TextField(verbose_name='为什么学习这门课程')),
                ('what_to_study_brief', models.TextField(verbose_name='我将学到哪些内容')),
                ('career_improvement', models.TextField(verbose_name='此项目如何有助于我的职业生涯')),
                ('prerequisite', models.TextField(max_length=1024, verbose_name='课程先修要求')),
                ('course', models.OneToOneField(on_delete=django.db.models.deletion.CASCADE, to='api.Course')),
                ('recommend_courses', models.ManyToManyField(blank=True, related_name='recommend_by', to='api.Course')),
            ],
            options={
                'verbose_name_plural': '07.课程或学位模块详细',
            },
        ),
        migrations.CreateModel(
            name='CourseOutline',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=128)),
                ('order', models.PositiveSmallIntegerField(default=1)),
                ('content', models.TextField(max_length=2048, verbose_name='内容')),
                ('course_detail', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.CourseDetail')),
            ],
            options={
                'verbose_name_plural': '09. 课程大纲',
            },
        ),
        migrations.CreateModel(
            name='CourseSection',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=128)),
                ('order', models.PositiveSmallIntegerField(help_text='建议每个课时之间空1至2个值,以备后续插入课时', verbose_name='课时排序')),
                ('section_type', models.SmallIntegerField(choices=[(0, '文档'), (1, '练习'), (2, '视频')], default=2)),
                ('section_link', models.CharField(blank=True, help_text='若是video,填vid,若是文档,填link', max_length=255, null=True)),
                ('video_time', models.CharField(blank=True, max_length=32, null=True, verbose_name='视频时长')),
                ('pub_date', models.DateTimeField(auto_now_add=True, verbose_name='发布时间')),
                ('free_trail', models.BooleanField(default=False, verbose_name='是否可试看')),
                ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='coursesections', to='api.CourseChapter')),
            ],
            options={
                'verbose_name_plural': '11. 课时',
            },
        ),
        migrations.CreateModel(
            name='CourseSubCategory',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=64, unique=True)),
                ('category', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.CourseCategory')),
            ],
            options={
                'verbose_name_plural': '02.课程子类',
            },
        ),
        migrations.CreateModel(
            name='DegreeCourse',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=128, unique=True)),
                ('course_img', models.CharField(max_length=255, verbose_name='缩略图')),
                ('brief', models.TextField(verbose_name='学位课程简介')),
                ('total_scholarship', models.PositiveIntegerField(default=40000, verbose_name='总奖学金(贝里)')),
                ('mentor_compensation_bonus', models.PositiveIntegerField(default=15000, verbose_name='本课程的导师辅导费用(贝里)')),
                ('period', models.PositiveIntegerField(default=150, verbose_name='建议学习周期(days)')),
                ('prerequisite', models.TextField(max_length=1024, verbose_name='课程先修要求')),
            ],
            options={
                'verbose_name_plural': '03.学位课',
            },
        ),
        migrations.CreateModel(
            name='Homework',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('title', models.CharField(max_length=128, verbose_name='作业题目')),
                ('order', models.PositiveSmallIntegerField(help_text='同一课程的每个作业之前的order值间隔1-2个数', verbose_name='作业顺序')),
                ('homework_type', models.SmallIntegerField(choices=[(0, '作业'), (1, '模块通关考核')], default=0)),
                ('requirement', models.TextField(max_length=1024, verbose_name='作业需求')),
                ('threshold', models.TextField(max_length=1024, verbose_name='踩分点')),
                ('recommend_period', models.PositiveSmallIntegerField(default=7, verbose_name='推荐完成周期(天)')),
                ('scholarship_value', models.PositiveSmallIntegerField(verbose_name='为该作业分配的奖学金(贝里)')),
                ('note', models.TextField(blank=True, null=True)),
                ('enabled', models.BooleanField(default=True, help_text='本作业如果后期不需要了,不想让学员看到,可以设置为False')),
                ('chapter', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.CourseChapter')),
            ],
            options={
                'verbose_name_plural': '12. 章节作业',
            },
        ),
        migrations.CreateModel(
            name='OftenAskedQuestion',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('object_id', models.PositiveIntegerField()),
                ('question', models.CharField(max_length=255)),
                ('answer', models.TextField(max_length=1024)),
                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
            ],
            options={
                'verbose_name_plural': '08. 常见问题',
            },
        ),
        migrations.CreateModel(
            name='PricePolicy',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('object_id', models.PositiveIntegerField()),
                ('valid_period', models.SmallIntegerField(choices=[(1, '1天'), (3, '3天'), (7, '1周'), (14, '2周'), (30, '1个月'), (60, '2个月'), (90, '3个月'), (180, '6个月'), (210, '12个月'), (540, '18个月'), (720, '24个月')])),
                ('price', models.FloatField()),
                ('content_type', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='contenttypes.ContentType')),
            ],
            options={
                'verbose_name_plural': '15. 价格策略',
            },
        ),
        migrations.CreateModel(
            name='Scholarship',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('time_percent', models.PositiveSmallIntegerField(help_text='只填百分值,如80,代表80%', verbose_name='奖励档位(时间百分比)')),
                ('value', models.PositiveIntegerField(verbose_name='奖学金数额')),
                ('degree_course', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.DegreeCourse')),
            ],
            options={
                'verbose_name_plural': '05.学位课奖学金',
            },
        ),
        migrations.CreateModel(
            name='Teacher',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=32)),
                ('role', models.SmallIntegerField(choices=[(0, '讲师'), (1, '导师')], default=0)),
                ('title', models.CharField(max_length=64, verbose_name='职位、职称')),
                ('signature', models.CharField(blank=True, help_text='导师签名', max_length=255, null=True)),
                ('image', models.CharField(max_length=128)),
                ('brief', models.TextField(max_length=1024)),
            ],
            options={
                'verbose_name_plural': '04.导师或讲师',
            },
        ),
        migrations.AddField(
            model_name='degreecourse',
            name='teachers',
            field=models.ManyToManyField(to='api.Teacher', verbose_name='课程讲师'),
        ),
        migrations.AddField(
            model_name='coursedetail',
            name='teachers',
            field=models.ManyToManyField(to='api.Teacher', verbose_name='课程讲师'),
        ),
        migrations.AddField(
            model_name='course',
            name='degree_course',
            field=models.ForeignKey(blank=True, help_text='若是学位课程,此处关联学位表', null=True, on_delete=django.db.models.deletion.CASCADE, to='api.DegreeCourse'),
        ),
        migrations.AddField(
            model_name='course',
            name='sub_category',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='api.CourseSubCategory'),
        ),
        migrations.AlterUniqueTogether(
            name='pricepolicy',
            unique_together=set([('content_type', 'object_id', 'valid_period')]),
        ),
        migrations.AlterUniqueTogether(
            name='oftenaskedquestion',
            unique_together=set([('content_type', 'object_id', 'question')]),
        ),
        migrations.AlterUniqueTogether(
            name='homework',
            unique_together=set([('chapter', 'title')]),
        ),
        migrations.AlterUniqueTogether(
            name='coursesection',
            unique_together=set([('chapter', 'section_link')]),
        ),
        migrations.AlterUniqueTogether(
            name='courseoutline',
            unique_together=set([('course_detail', 'title')]),
        ),
        migrations.AlterUniqueTogether(
            name='coursechapter',
            unique_together=set([('course', 'chapter')]),
        ),
    ]
Exemple #24
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='MetaInstall',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('installed_example', models.BooleanField(default=False)),
            ],
        ),
        migrations.CreateModel(
            name='QueryHistory',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('query', models.TextField()),
                ('last_state', models.IntegerField(db_index=True)),
                ('has_results', models.BooleanField(default=False)),
                ('submission_date', models.DateTimeField(auto_now_add=True)),
                ('server_id', models.CharField(max_length=1024, null=True)),
                ('server_guid',
                 models.CharField(default=None, max_length=1024, null=True)),
                ('statement_number', models.SmallIntegerField(default=0)),
                ('operation_type', models.SmallIntegerField(null=True)),
                ('modified_row_count', models.FloatField(null=True)),
                ('log_context', models.CharField(max_length=1024, null=True)),
                ('server_host',
                 models.CharField(default='',
                                  help_text='Host of the query server.',
                                  max_length=128)),
                ('server_port',
                 models.PositiveIntegerField(
                     default=10000, help_text='Port of the query server.')),
                ('server_name',
                 models.CharField(default='',
                                  help_text='Name of the query server.',
                                  max_length=128)),
                ('server_type',
                 models.CharField(choices=[('beeswax', 'Beeswax'),
                                           ('hiveserver2', 'Hive Server 2'),
                                           ('mysql', 'MySQL'),
                                           ('postgresql', 'PostgreSQL'),
                                           ('sqlite', 'sqlite'),
                                           ('oracle', 'oracle')],
                                  default='beeswax',
                                  help_text='Type of the query server.',
                                  max_length=128)),
                ('query_type',
                 models.SmallIntegerField(choices=[(0, 'HQL'), (1, 'IMPALA')],
                                          default=0,
                                          help_text='Type of the query.')),
                ('notify', models.BooleanField(default=False)),
                ('is_redacted', models.BooleanField(default=False)),
                ('extra', models.TextField(default='{}')),
                ('is_cleared', models.BooleanField(default=False)),
            ],
            options={
                'ordering': ['-submission_date'],
            },
        ),
        migrations.CreateModel(
            name='SavedQuery',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('type', models.IntegerField()),
                ('data', models.TextField(max_length=65536)),
                ('name', models.CharField(max_length=80)),
                ('desc', models.TextField(max_length=1024)),
                ('mtime', models.DateTimeField(auto_now=True)),
                ('is_auto', models.BooleanField(db_index=True, default=False)),
                ('is_trashed',
                 models.BooleanField(db_index=True,
                                     default=False,
                                     help_text='If this query is trashed.',
                                     verbose_name='Is trashed')),
                ('is_redacted', models.BooleanField(default=False)),
                ('owner',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'ordering': ['-mtime'],
            },
        ),
        migrations.CreateModel(
            name='Session',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('status_code', models.PositiveSmallIntegerField()),
                ('secret', models.TextField(max_length=100)),
                ('guid', models.TextField(max_length=100)),
                ('server_protocol_version',
                 models.SmallIntegerField(default=0)),
                ('last_used',
                 models.DateTimeField(auto_now=True,
                                      db_index=True,
                                      verbose_name='Last used')),
                ('application',
                 models.CharField(default='beeswax',
                                  help_text='Application we communicate with.',
                                  max_length=128)),
                ('properties', models.TextField(default='{}')),
                ('owner',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.AddField(
            model_name='queryhistory',
            name='design',
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='beeswax.SavedQuery'),
        ),
        migrations.AddField(
            model_name='queryhistory',
            name='owner',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                to=settings.AUTH_USER_MODEL),
        ),
        migrations.CreateModel(
            name='HiveServerQueryHistory',
            fields=[],
            options={
                'proxy': True,
                'indexes': [],
            },
            bases=('beeswax.queryhistory', ),
        ),
    ]
Exemple #25
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Agency',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='Artist',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('firstname', models.CharField(max_length=60)),
                ('lastname', models.CharField(max_length=60)),
                ('agency',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='PID.Agency')),
            ],
        ),
        migrations.CreateModel(
            name='ArtisteType',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('artistId',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='PID.Artist')),
            ],
        ),
        migrations.CreateModel(
            name='ArtisteTypeShow',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('artisteTypeId',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='PID.ArtisteType')),
            ],
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('type', models.CharField(max_length=10)),
            ],
        ),
        migrations.CreateModel(
            name='Localitie',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
            ],
        ),
        migrations.CreateModel(
            name='Location',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('designation', models.CharField(max_length=60)),
                ('address', models.CharField(max_length=60)),
                ('website', models.CharField(max_length=255)),
                ('phone', models.CharField(max_length=30)),
                ('localityId',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to='PID.Localitie')),
            ],
        ),
        migrations.CreateModel(
            name='Profile',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('language', models.CharField(max_length=60)),
                ('user',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Representation',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('locationId',
                 models.ManyToManyField(blank=True,
                                        related_name='representation',
                                        to='PID.Location')),
            ],
        ),
        migrations.CreateModel(
            name='RepresentationUser',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('places', models.IntegerField()),
                ('representationId',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='PID.Representation')),
                ('user',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Show',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('title', models.CharField(max_length=255)),
                ('posterUrl', models.CharField(max_length=255)),
                ('price', models.DecimalField(decimal_places=2,
                                              max_digits=10)),
                ('bookable', models.SmallIntegerField()),
                ('category',
                 models.ForeignKey(default=1,
                                   on_delete=django.db.models.deletion.CASCADE,
                                   to='PID.Category')),
                ('location_id',
                 models.ManyToManyField(blank=True,
                                        related_name='show',
                                        to='PID.Location')),
            ],
        ),
        migrations.CreateModel(
            name='Type',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('type', models.CharField(max_length=60)),
            ],
        ),
        migrations.AddField(
            model_name='representation',
            name='showId',
            field=models.ManyToManyField(blank=True,
                                         related_name='representation',
                                         to='PID.Show'),
        ),
        migrations.AddField(
            model_name='artistetypeshow',
            name='showId',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to='PID.Show'),
        ),
        migrations.AddField(
            model_name='artistetype',
            name='typeId',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to='PID.Type'),
        ),
    ]
Exemple #26
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        migrations.swappable_dependency(settings.AUTH_USER_MODEL),
    ]

    operations = [
        migrations.CreateModel(
            name='Author',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('user',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('cat_name',
                 models.CharField(
                     help_text=
                     "please don't use any symbols and only lowercase letters allowed",
                     max_length=150)),
            ],
            options={
                'ordering': ['cat_name'],
            },
        ),
        migrations.CreateModel(
            name='Comment',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('time', models.DateTimeField(auto_now_add=True)),
                ('comm', models.TextField()),
            ],
        ),
        migrations.CreateModel(
            name='Contact',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('username', models.CharField(max_length=100)),
                ('email', models.EmailField(max_length=254)),
                ('message', models.TextField()),
                ('time', models.DateTimeField(auto_now_add=True)),
            ],
        ),
        migrations.CreateModel(
            name='Post',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('title', models.CharField(max_length=255)),
                ('overview', models.TextField(blank=True, null=True)),
                ('slug', models.SlugField(blank=True,
                                          max_length=255,
                                          null=True)),
                ('body',
                 ckeditor_uploader.fields.RichTextUploadingField(null=True)),
                ('time_upload', models.DateTimeField(auto_now_add=True)),
                ('thumbnail', models.ImageField(upload_to='thumbnails')),
                ('publish', models.BooleanField()),
                ('read', models.IntegerField(default=0)),
                ('author',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='Blogapp.author')),
                ('category',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='Blogapp.category')),
                ('favourite',
                 models.ManyToManyField(blank=True,
                                        related_name='favourite',
                                        to=settings.AUTH_USER_MODEL)),
                ('likes',
                 models.ManyToManyField(blank=True,
                                        related_name='likes',
                                        to=settings.AUTH_USER_MODEL)),
            ],
            options={
                'ordering': ['-pk'],
            },
        ),
        migrations.CreateModel(
            name='Subscribe',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('email', models.EmailField(max_length=254)),
            ],
            options={
                'ordering': ['-pk'],
            },
        ),
        migrations.CreateModel(
            name='UserOTP',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('time_st', models.DateTimeField(auto_now=True)),
                ('otp', models.SmallIntegerField()),
                ('user',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='SubComment',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('time', models.DateTimeField(auto_now_add=True)),
                ('comm', models.TextField()),
                ('comment',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='Blogapp.comment')),
                ('post',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='Blogapp.post')),
                ('user',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.CreateModel(
            name='Profile',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('dob',
                 models.DateField(
                     blank=True,
                     help_text=
                     'Please use the following format: <em>YYYY-MM-DD</em>.',
                     null=True)),
                ('photo',
                 models.ImageField(blank=True,
                                   null=True,
                                   upload_to='user_profiles')),
                ('user',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to=settings.AUTH_USER_MODEL)),
            ],
        ),
        migrations.AddField(
            model_name='comment',
            name='post',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                to='Blogapp.post'),
        ),
        migrations.AddField(
            model_name='comment',
            name='user',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE,
                to=settings.AUTH_USER_MODEL),
        ),
    ]
Exemple #27
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='admin',
            fields=[
                ('adminId', models.AutoField(primary_key=True, serialize=False)),
                ('adminname', models.CharField(max_length=50)),
                ('password', models.CharField(default='', max_length=20)),
                ('email', models.CharField(default='', max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='article',
            fields=[
                ('articleId', models.AutoField(primary_key=True, serialize=False)),
                ('browserNum', models.IntegerField()),
                ('articleStatus', models.IntegerField()),
                ('heading', models.CharField(max_length=250)),
                ('thumb', models.CharField(max_length=250)),
                ('modifydate', models.DateTimeField(auto_now=True)),
                ('adminId', models.ForeignKey(on_delete=None, to='server.admin')),
            ],
        ),
        migrations.CreateModel(
            name='menu',
            fields=[
                ('menuId', models.AutoField(primary_key=True, serialize=False)),
                ('menuName', models.CharField(max_length=200)),
                ('menuStatus', models.SmallIntegerField(default=0)),
            ],
        ),
        migrations.CreateModel(
            name='position',
            fields=[
                ('positionId', models.AutoField(primary_key=True, serialize=False)),
                ('name', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='position_content',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('positionId', models.IntegerField()),
                ('articleId', models.IntegerField()),
            ],
        ),
        migrations.CreateModel(
            name='source',
            fields=[
                ('sourceId', models.AutoField(primary_key=True, serialize=False)),
                ('sourceName', models.CharField(max_length=200)),
            ],
        ),
        migrations.CreateModel(
            name='articlecontent',
            fields=[
                ('contentId', models.AutoField(primary_key=True, serialize=False)),
                ('contents', DjangoUeditor.models.UEditorField()),
                ('articleId', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='server.article')),
            ],
        ),
        migrations.AddField(
            model_name='article',
            name='menuId',
            field=models.ForeignKey(on_delete=None, to='server.menu'),
        ),
        migrations.AddField(
            model_name='article',
            name='sourceId',
            field=models.ForeignKey(on_delete=None, to='server.source'),
        ),
    ]
Exemple #28
0
class ProvinceDataRecord(models.Model):

    province = models.ForeignKey(
        to=Province, null=False, blank=False, on_delete=models.CASCADE,
        verbose_name='省份', related_name='data_record_ls')

    year = models.IntegerField(verbose_name='年度', null=False, blank=False)

    # 基础值
    r_d = models.FloatField(verbose_name='企业 R&D 内部经费支出(亿元)', null=False, blank=False, validators=[can_not_equal_zero])
    renewable_energy_per = models.FloatField(verbose_name='可再生能源供给占比(%)', null=False, blank=False, validators=[can_not_equal_zero])
    per_unit_gdp = models.FloatField(verbose_name='单位GDP能耗(吨/万元)', null=False, blank=False, validators=[can_not_equal_zero])
    rural_urban = models.FloatField(verbose_name='乡-城人均年收入比(/)', null=False, blank=False, validators=[can_not_equal_zero])
    urban_per = models.FloatField(verbose_name='城镇居民人均可支配收入(元)', null=False, blank=False, validators=[can_not_equal_zero])
    rural_per = models.FloatField(verbose_name='农村居民人均可支配收入(元)', null=False, blank=False, validators=[can_not_equal_zero])
    garbage = models.FloatField(verbose_name='生活垃圾无害化处理率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    bus_per = models.FloatField(verbose_name='平均万人拥有公共汽车(/)', null=False, blank=False, validators=[can_not_equal_zero])
    urban_sewage = models.FloatField(verbose_name='城镇生活污水集中处理率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    edu_years = models.FloatField(verbose_name='平均受教育年限(年)', null=False, blank=False, validators=[can_not_equal_zero])
    mortality = models.FloatField(verbose_name='死亡率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    pension_cov = models.FloatField(verbose_name='养老保险覆盖率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    medical_cov = models.FloatField(verbose_name='医疗保险覆盖率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    unemployment_cov = models.FloatField(verbose_name='失业保险覆盖率(%)', null=False, blank=False, validators=[can_not_equal_zero])
    pm25 = models.FloatField(verbose_name='PM2.5年平均浓度(微克/立方米)', null=False, blank=False, validators=[can_not_equal_zero])
    so2_emissions = models.FloatField(verbose_name='二氧化硫排放量(万吨)', null=False, blank=False, validators=[can_not_equal_zero])
    co2_per_gdp = models.FloatField(verbose_name='单位GDP二氧化碳排放量(千克/元)', null=False, blank=False, validators=[can_not_equal_zero])
    cod_emissions = models.FloatField(verbose_name='化学需氧量排放量(万吨)', null=False, blank=False, validators=[can_not_equal_zero])
    nh_emissions = models.FloatField(verbose_name='氨氮排放量(万吨)', null=False, blank=False, validators=[can_not_equal_zero])
    water_per = models.FloatField(verbose_name='人均耗水量(立方米)', null=False, blank=False, validators=[can_not_equal_zero])
    water_per_gdp = models.FloatField(verbose_name='单位GDP用水量(立方米/万元)', null=False, blank=False, validators=[can_not_equal_zero])
    planting_area = models.FloatField(verbose_name='播种面积占比(%)', null=False, blank=False, validators=[can_not_equal_zero])
    ef_per = models.FloatField(verbose_name='人均生态足迹(万吨碳/万人)', null=False, blank=False, validators=[can_not_equal_zero])

    # 目标值
    r_d_target = models.FloatField(verbose_name='企业 R&D 内部经费支出的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    renewable_energy_per_target = models.FloatField(verbose_name='可再生能源供给占比的目标值', null=False, blank=False,
                                             validators=[can_not_equal_zero])
    per_unit_gdp_target = models.FloatField(verbose_name='单位GDP能耗的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    rural_urban_target = models.FloatField(verbose_name='乡-城人均年收入比的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    urban_per_target = models.FloatField(verbose_name='城镇居民人均可支配收入的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    rural_per_target = models.FloatField(verbose_name='农村居民人均可支配收入的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    garbage_target = models.FloatField(verbose_name='生活垃圾无害化处理率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    bus_per_target = models.FloatField(verbose_name='平均万人拥有公共汽车的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    urban_sewage_target = models.FloatField(verbose_name='城镇生活污水集中处理率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    edu_years_target = models.FloatField(verbose_name='平均受教育年限的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    mortality_target = models.FloatField(verbose_name='死亡率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    pension_cov_target = models.FloatField(verbose_name='养老保险覆盖率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    medical_cov_target = models.FloatField(verbose_name='医疗保险覆盖率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    unemployment_cov_target = models.FloatField(verbose_name='失业保险覆盖率的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    pm25_target = models.FloatField(verbose_name='PM2.5年平均浓度的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    so2_emissions_target = models.FloatField(verbose_name='二氧化硫排放量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    co2_per_gdp_target = models.FloatField(verbose_name='单位GDP二氧化碳排放量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    cod_emissions_target = models.FloatField(verbose_name='化学需氧量排放量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    nh_emissions_target = models.FloatField(verbose_name='氨氮排放量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    water_per_target = models.FloatField(verbose_name='人均耗水量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    water_per_gdp_target = models.FloatField(verbose_name='单位GDP用水量的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    planting_area_target = models.FloatField(verbose_name='播种面积占比的目标值', null=False, blank=False, validators=[can_not_equal_zero])
    ef_per_target = models.FloatField(verbose_name='人均生态足迹的目标值', null=False, blank=False, validators=[can_not_equal_zero])

    # # attach
    #
    # attach = models.FileField(
    #     verbose_name='年度省内各地区数据', upload_to='data/%Y-%m-%d', default='data/数据模板.xlsx',
    #     validators=[
    #         FileExtensionValidator(allowed_extensions=('xlsx',), message='仅支持上传扩展名为 xlsx 的Excel文件'),
    #         import_excel_validator,
    #                 ],
    #                           )

    # 后续计算
    green_innovation = models.FloatField(verbose_name='绿色创新', null=True, blank=True)
    renewable_energy = models.FloatField(verbose_name='可再生能源供给', null=True, blank=True,
                                             validators=[can_not_equal_zero])
    energy_use = models.FloatField(verbose_name='能源利用', null=True, blank=True)
    parma_ratio = models.FloatField(verbose_name='帕尔玛比率', null=True, blank=True)
    income = models.FloatField(verbose_name='收入', null=True, blank=True)
    infrastructure = models.FloatField(verbose_name='基础设施建设', null=True, blank=True)

    education = models.FloatField(verbose_name='教育', null=True, blank=True)
    life_expectancy = models.FloatField(verbose_name='预期寿命', null=True, blank=True)
    social_security = models.FloatField(verbose_name='社会保障', null=True, blank=True)
    air_pollution = models.FloatField(verbose_name='大气污染', null=True, blank=True)
    greenhouse = models.FloatField(verbose_name='温室气体排放', null=True, blank=True)
    nitrogen = models.FloatField(verbose_name='氮排放', null=True, blank=True)
    water_withdrawal = models.FloatField(verbose_name='取水量', null=True, blank=True)
    land_use = models.FloatField(verbose_name='土地利用', null=True, blank=True)
    EF = models.FloatField(verbose_name='生态足迹', null=True, blank=True)

    city_green_economy = models.FloatField(verbose_name='绿色经济', null=True, blank=True)
    city_sustainable = models.FloatField(verbose_name='可持续发展', null=True, blank=True)
    city_gep_plus = models.FloatField(verbose_name='GEP+', null=True, blank=True)

    # 1 新上传 2 excel 地区数据解析入库成功 3 计算中 4 计算失败 5 计算成功 6 更新数据需要重新计算
    status = models.SmallIntegerField(verbose_name='状态', default=1, )

    class Meta:
        ordering = '-year', 'province'
        verbose_name = '省份数据'
        verbose_name_plural = verbose_name

    def __str__(self):
        return f'{self.province.name},{self.year}'
Exemple #29
0
class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Actor',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=100, verbose_name='Имя')),
                ('age',
                 models.PositiveSmallIntegerField(default=0,
                                                  verbose_name='Возраст')),
                ('description', models.TextField(verbose_name='Описание')),
                ('image',
                 models.ImageField(upload_to='actors/',
                                   verbose_name='Изображение')),
            ],
            options={
                'verbose_name': 'Актеры и режессеры',
                'verbose_name_plural': 'Актеры и режессеры',
            },
        ),
        migrations.CreateModel(
            name='Category',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name',
                 models.CharField(max_length=150, verbose_name='Категория')),
                ('description', models.TextField(verbose_name='Описание')),
                ('url', models.SlugField(max_length=160, unique=True)),
            ],
            options={
                'verbose_name': 'Категория',
                'verbose_name_plural': 'Категории',
            },
        ),
        migrations.CreateModel(
            name='Genre',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=100, verbose_name='Имя')),
                ('description', models.TextField(verbose_name='Описание')),
                ('url', models.SlugField(max_length=160, unique=True)),
            ],
            options={
                'verbose_name': 'Жанр',
                'verbose_name_plural': 'Жанры',
            },
        ),
        migrations.CreateModel(
            name='Movie',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('title',
                 models.CharField(max_length=100, verbose_name='Название')),
                ('tagline',
                 models.CharField(default='',
                                  max_length=100,
                                  verbose_name='Слоган')),
                ('description', models.TextField(verbose_name='Описание')),
                ('poster',
                 models.ImageField(upload_to='movies/',
                                   verbose_name='Постер')),
                ('year',
                 models.PositiveSmallIntegerField(default=2019,
                                                  verbose_name='Дата выхода')),
                ('country', models.CharField(max_length=30, verbose_name='')),
                ('world_premiere',
                 models.DateField(default=datetime.date.today,
                                  verbose_name='Примьера в мире')),
                ('budget',
                 models.PositiveIntegerField(
                     default=0,
                     help_text='Указывать сумму в долларах',
                     verbose_name='Бюджет')),
                ('fees_in_usa',
                 models.PositiveIntegerField(
                     default=0,
                     help_text='Указывать сумму в долларах',
                     verbose_name='Сборы в США')),
                ('fees_in_world',
                 models.PositiveIntegerField(
                     default=0,
                     help_text='Указывать сумму в долларах',
                     verbose_name='Сборы в мире')),
                ('url', models.SlugField(max_length=130, unique=True)),
                ('draft',
                 models.BooleanField(default=False, verbose_name='Черновик')),
                ('actors',
                 models.ManyToManyField(related_name='film_actor',
                                        to='movies.Actor',
                                        verbose_name='актеры')),
                ('category',
                 models.ForeignKey(
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     to='movies.category',
                     verbose_name='Категория')),
                ('directors',
                 models.ManyToManyField(related_name='film_director',
                                        to='movies.Actor',
                                        verbose_name='режиссер')),
                ('genres',
                 models.ManyToManyField(to='movies.Genre',
                                        verbose_name='жанры')),
            ],
            options={
                'verbose_name': 'Фильм',
                'verbose_name_plural': 'Фильмы',
            },
        ),
        migrations.CreateModel(
            name='RatingStar',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('value',
                 models.SmallIntegerField(default=0, verbose_name='Значение')),
            ],
            options={
                'verbose_name': 'Звезда рейтинга',
                'verbose_name_plural': 'Звезды рейтинга',
            },
        ),
        migrations.CreateModel(
            name='Reviews',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('email', models.EmailField(max_length=254)),
                ('name', models.CharField(max_length=100, verbose_name='')),
                ('text', models.TextField(max_length=5000, verbose_name='')),
                ('movie',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='movies.movie',
                                   verbose_name='')),
                ('parent',
                 models.ForeignKey(
                     blank=True,
                     null=True,
                     on_delete=django.db.models.deletion.SET_NULL,
                     to='movies.reviews',
                     verbose_name='')),
            ],
            options={
                'verbose_name': 'Отзыв',
                'verbose_name_plural': 'Отзывы',
            },
        ),
        migrations.CreateModel(
            name='Rating',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('ip',
                 models.CharField(max_length=15, verbose_name='IP address')),
                ('movie',
                 models.ForeignKey(on_delete=django.db.models.fields.CharField,
                                   to='movies.movie',
                                   verbose_name='фильм')),
                ('star',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='movies.ratingstar',
                                   verbose_name='звезда')),
            ],
            options={
                'verbose_name': 'Рейтинг',
                'verbose_name_plural': 'Рейтинги',
            },
        ),
        migrations.CreateModel(
            name='MovieShots',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('title',
                 models.CharField(max_length=100, verbose_name='Заголовок')),
                ('description', models.TextField(verbose_name='Описание')),
                ('image',
                 models.ImageField(upload_to='movie_shots/',
                                   verbose_name='Изображение')),
                ('movie',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='movies.movie',
                                   verbose_name='Фильм')),
            ],
            options={
                'verbose_name': 'Кадр из фильма',
                'verbose_name_plural': 'Кадры из фильма',
            },
        ),
    ]
Exemple #30
0
class Migration(migrations.Migration):

    initial = True

    dependencies = [
        ('accounts', '0001_initial'),
        ('mall', '0001_initial'),
    ]

    operations = [
        migrations.CreateModel(
            name='Cart',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('name', models.CharField(max_length=128, verbose_name='商品名称')),
                ('img', models.ImageField(upload_to='', verbose_name='商品的主图')),
                ('price', models.IntegerField(verbose_name='兑换价格')),
                ('origin_price', models.FloatField(verbose_name='原价')),
                ('count', models.PositiveIntegerField(verbose_name='购买数量')),
                ('amount', models.FloatField(verbose_name='总额')),
                ('status', models.SmallIntegerField(choices=[(10, '购物车'), (11, '已提交'), (12, '已支付'), (13, '已发货'), (14, '已发货'), (15, '已删除')], default=10, verbose_name='状态')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
            ],
            options={
                'db_table': 'mine_cart',
            },
        ),
        migrations.CreateModel(
            name='Comments',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('desc', models.CharField(max_length=256, verbose_name='评价内容')),
                ('reorder', models.SmallIntegerField(default=0, verbose_name='排序')),
                ('is_anonymous', models.BooleanField(default=True, verbose_name='是否匿名')),
                ('score', models.FloatField(default=10.0, verbose_name='商品评分')),
                ('score_deliver', models.FloatField(default=10.0, verbose_name='配送服务分')),
                ('score_package', models.FloatField(default=10.0, verbose_name='快递包装分')),
                ('score_speed', models.FloatField(default=10.0, verbose_name='送货速度分')),
                ('is_valid', models.BooleanField(default=True, verbose_name='是否有效')),
                ('created_at', models.DateTimeField(auto_now_add=True, verbose_name='创建时间')),
                ('updated_at', models.DateTimeField(auto_now=True, verbose_name='修改时间')),
            ],
            options={
                'db_table': 'mine_product_comments',
            },
        ),
        migrations.CreateModel(
            name='Order',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('sn', models.CharField(max_length=32, verbose_name='订单编号')),
                ('buy_count', models.IntegerField(default=1, verbose_name='购买数量')),
                ('buy_amount', models.FloatField(verbose_name='总价')),
                ('to_user', models.CharField(max_length=32, verbose_name='收货人')),
                ('to_area', models.CharField(max_length=32, verbose_name='省市区')),
                ('to_address', models.CharField(max_length=256, verbose_name='详细地址')),
                ('to_phone', models.CharField(max_length=32, verbose_name='手机号码')),
                ('remark', models.CharField(blank=True, max_length=255, null=True, verbose_name='备注')),
                ('express_type', models.CharField(blank=True, max_length=32, null=True, verbose_name='快递')),
                ('express_no', models.CharField(blank=True, max_length=32, null=True, verbose_name='单号')),
                ('status', models.SmallIntegerField(choices=[(10, '购物车'), (11, '已提交'), (12, '已支付'), (13, '已发货'), (14, '已发货'), (15, '已删除')], default=11, verbose_name='订单状态')),
                ('user', models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='orders', to='accounts.User')),
            ],
            options={
                'db_table': 'mine_order',
            },
        ),
        migrations.AddField(
            model_name='comments',
            name='order',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='mine.Order', verbose_name='订单'),
        ),
        migrations.AddField(
            model_name='comments',
            name='product',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='mall.Product', verbose_name='商品'),
        ),
        migrations.AddField(
            model_name='comments',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='comments', to='accounts.User', verbose_name='用户'),
        ),
        migrations.AddField(
            model_name='cart',
            name='order',
            field=models.ForeignKey(null=True, on_delete=django.db.models.deletion.CASCADE, to='mine.Order', verbose_name='订单'),
        ),
        migrations.AddField(
            model_name='cart',
            name='product',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='mall.Product'),
        ),
        migrations.AddField(
            model_name='cart',
            name='user',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='carts', to='accounts.User'),
        ),
    ]