# -*- coding: utf-8 -*-

"""Migrations to set default values for the Version and VersionDaily models."""

from __future__ import unicode_literals

from django.db import migrations, models


class Migration(migrations.Migration):
    """Set the default values for the Version and VersionDaily models."""

    dependencies = [("crashreport_stats", "0001_initial")]

    operations = [
        migrations.AlterField(
            model_name="version",
            name="first_seen_on",
            field=models.DateField(auto_now_add=True),
        ),
        migrations.AlterField(
            model_name="version",
            name="heartbeats",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="version",
            name="other",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="version",
            name="prob_crashes",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="version",
            name="released_on",
            field=models.DateField(auto_now_add=True),
        ),
        migrations.AlterField(
            model_name="version",
            name="smpl",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="versiondaily",
            name="date",
            field=models.DateField(auto_now_add=True),
        ),
        migrations.AlterField(
            model_name="versiondaily",
            name="heartbeats",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="versiondaily",
            name="other",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="versiondaily",
            name="prob_crashes",
            field=models.IntegerField(default=0),
        ),
        migrations.AlterField(
            model_name="versiondaily",
            name="smpl",
            field=models.IntegerField(default=0),
        ),
    ]
