# -*- coding: utf-8 -*-
# Generated by Django 1.10.2 on 2017-05-02 09:55
from __future__ import unicode_literals

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


class Migration(migrations.Migration):

    dependencies = [
        ('crashreports', '0001_initial'),
    ]

    operations = [
        migrations.AlterField(
            model_name='crashreport',
            name='boot_reason',
            field=models.CharField(db_index=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='crashreport',
            name='build_fingerprint',
            field=models.CharField(db_index=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='crashreport',
            name='date',
            field=models.DateTimeField(db_index=True),
        ),
        migrations.AlterField(
            model_name='crashreport',
            name='device',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='crashreports', to='crashreports.Device'),
        ),
        migrations.AlterField(
            model_name='crashreport',
            name='power_off_reason',
            field=models.CharField(db_index=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='crashreport',
            name='power_on_reason',
            field=models.CharField(db_index=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='device',
            name='uuid',
            field=models.CharField(db_index=True, default=uuid.uuid4, editable=False, max_length=64, unique=True),
        ),
        migrations.AlterField(
            model_name='heartbeat',
            name='build_fingerprint',
            field=models.CharField(db_index=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='heartbeat',
            name='date',
            field=models.DateTimeField(db_index=True),
        ),
        migrations.AlterField(
            model_name='heartbeat',
            name='device',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='heartbeats', to='crashreports.Device'),
        ),
        migrations.AlterField(
            model_name='logfile',
            name='crashreport',
            field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='logfiles', to='crashreports.Crashreport'),
        ),
    ]
