示例#1
0
class Lane(models.Model):
    library = models.ForeignKey(Library, on_delete=models.PROTECT)
    machine = models.ForeignKey(Machine, on_delete=models.PROTECT)
    flowcell = models.CharField(max_length=32)
    rundate = models.DateField()
    reads = models.IntegerField(null=True, blank=True)
    passedpf = models.IntegerField(null=True, blank=True)
    lanenum = models.IntegerField()
    flowlane = models.IntegerField()
    paired = models.BooleanField(default=False)
    readlength = models.IntegerField(null=True, blank=True)
    mapped = models.IntegerField(null=True, blank=True)
    facility = models.ForeignKey(Facility, on_delete=models.PROTECT)
    seqsamplepf = models.TextField(blank=True)
    seqsamplebad = models.TextField(blank=True)
    qualmeanpf = dbarray.FloatArrayField(null=True)
    qualstdevpf = dbarray.FloatArrayField(null=True)
    qualmean = dbarray.FloatArrayField(null=True)
    qualstdev = dbarray.FloatArrayField(null=True)
    summaryurl = models.CharField(max_length=1024, null=True, blank=True)
    genomicssampleid = models.CharField(max_length=32, null=True, blank=True)
    usersampleid = models.CharField(max_length=1024, null=True, blank=True)
    notes = models.TextField(null=True, blank=True)
    failed = models.BooleanField(default=False)
    runnumber = models.CharField(null=True, blank=True, max_length=255)
    status = models.ForeignKey(Status, on_delete=models.PROTECT)
    external_records = models.ManyToManyField(ExternalRecord,
                                              db_table='lane_external_record',
                                              related_name='lanes')

    objects = LaneManager()

    @property
    def total_passedpf(self):
        if self.paired and self.passedpf is not None:
            return self.passedpf * 2
        else:
            return self.passedpf

    @property
    def total_reads(self):
        if self.paired and self.reads is not None:
            return self.reads * 2
        else:
            return self.reads

    @property
    def name(self):
        return "%s%02d" % (self.facility, self.lanenum)

    @property
    def notes_formatted(self):
        if self.notes is None:
            return ''
        else:
            return "\n".join(self.notes.split(";"))

    @property
    def model_parent(self):
        return self.library

    @property
    def is_published(self):
        return any([x.is_public for x in self.external_records.all()])

    @property
    def public_records(self):
        return [x for x in self.external_records.all() if x.is_public]

    def __unicode__(self):
        return "%s_%s%02d" % (self.library, self.facility, self.lanenum)

    class Meta:
        db_table = u'lane'
        unique_together = ('library', 'lanenum', 'facility')
        ordering = ['library']
示例#2
0
class Migration(migrations.Migration):

    dependencies = [
        ('registration', '0081_merge_20181231_1518'),
        ('registration', '0080_cart'),
    ]

    operations = [
        migrations.CreateModel(
            name='Charity',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name', models.CharField(max_length=200)),
                ('url',
                 models.CharField(blank=True,
                                  help_text='Charity link',
                                  max_length=500,
                                  verbose_name='URL')),
            ],
            options={
                'abstract': False,
            },
        ),
        migrations.AlterModelOptions(
            name='order',
            options={
                'permissions': (('issue_refund', 'Can create refunds'), )
            },
        ),
        migrations.RemoveField(
            model_name='cart',
            name='ipAddress',
        ),
        migrations.AddField(
            model_name='badge',
            name='printCount',
            field=models.IntegerField(default=0),
        ),
        migrations.AddField(
            model_name='event',
            name='badgeTheme',
            field=models.CharField(
                default='apis',
                help_text='Name of badge theme to use for printing',
                max_length=200,
                verbose_name='Badge Theme'),
        ),
        migrations.AddField(
            model_name='event',
            name='codeOfConduct',
            field=models.CharField(
                blank=True,
                default='/code-of-conduct',
                help_text='Link to code of conduct agreement',
                max_length=500,
                verbose_name='Code of Conduct'),
        ),
        migrations.AddField(
            model_name='event',
            name='collectAddress',
            field=models.BooleanField(
                default=True,
                help_text=
                'Disable to skip collecting a mailing address for each attendee.',
                verbose_name='Collect Address'),
        ),
        migrations.AddField(
            model_name='event',
            name='collectBillingAddress',
            field=models.BooleanField(
                default=True,
                help_text=
                "Disable to skip collecting a billing address for each order. Note that a billing address and buyer email is required to qualify for Square's Chargeback protection.",
                verbose_name='Collect Billing Address'),
        ),
        migrations.AddField(
            model_name='event',
            name='dealerEmail',
            field=models.CharField(
                blank=True,
                default=b'*****@*****.**',
                help_text=
                'Email to display on error messages for dealer registration',
                max_length=200,
                verbose_name='Dealer Email'),
        ),
        migrations.AddField(
            model_name='event',
            name='registrationEmail',
            field=models.CharField(
                blank=True,
                default=b'*****@*****.**',
                help_text=
                'Email to display on error messages for attendee registration',
                max_length=200,
                verbose_name='Registration Email'),
        ),
        migrations.AddField(
            model_name='event',
            name='staffEmail',
            field=models.CharField(
                blank=True,
                default=b'*****@*****.**',
                help_text=
                'Email to display on error messages for staff registration',
                max_length=200,
                verbose_name='Staff Email'),
        ),
        migrations.AddField(
            model_name='order',
            name='apiData',
            field=models.TextField(blank=True),
        ),
        migrations.AlterField(
            model_name='attendee',
            name='address1',
            field=models.CharField(blank=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='attendee',
            name='city',
            field=models.CharField(blank=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='attendee',
            name='country',
            field=models.CharField(blank=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='attendee',
            name='postalCode',
            field=models.CharField(blank=True, max_length=20),
        ),
        migrations.AlterField(
            model_name='attendee',
            name='state',
            field=models.CharField(blank=True, max_length=200),
        ),
        migrations.AlterField(
            model_name='badge',
            name='attendee',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Attendee'),
        ),
        migrations.AlterField(
            model_name='cart',
            name='form',
            field=models.CharField(choices=[('Attendee', 'Attendee'),
                                            ('Staff', 'Staff'),
                                            ('Dealer', 'Dealer'),
                                            ('Dealer Assistant',
                                             'Dealer Assistant')],
                                   max_length=50),
        ),
        migrations.AlterField(
            model_name='cart',
            name='transferedDate',
            field=models.DateTimeField(null=True),
        ),
        migrations.AlterField(
            model_name='cashdrawer',
            name='action',
            field=models.CharField(choices=[('Open', 'Open'),
                                            ('Close', 'Close'),
                                            ('Transaction', 'Transaction'),
                                            ('Deposit', 'Deposit')],
                                   default='Open',
                                   max_length=20),
        ),
        migrations.AlterField(
            model_name='dealer',
            name='event',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Event'),
        ),
        migrations.AlterField(
            model_name='dealer',
            name='tableSize',
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                to='registration.TableSize'),
        ),
        migrations.AlterField(
            model_name='dealerasst',
            name='attendee',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Attendee'),
        ),
        migrations.AlterField(
            model_name='dealerasst',
            name='event',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Event'),
        ),
        migrations.AlterField(
            model_name='event',
            name='allowOnlineMinorReg',
            field=models.BooleanField(
                default=False,
                help_text=
                'Allow registration for anyone age 13 and older online. Otherwise, registration is restricted to those 18 or older.',
                verbose_name='Allow online minor registration'),
        ),
        migrations.AlterField(
            model_name='event',
            name='attendeeRegEnd',
            field=models.DateTimeField(
                verbose_name='Attendee Registration End'),
        ),
        migrations.AlterField(
            model_name='event',
            name='attendeeRegStart',
            field=models.DateTimeField(
                verbose_name='Attendee Registration Start'),
        ),
        migrations.AlterField(
            model_name='event',
            name='dealerDiscount',
            field=models.ForeignKey(
                blank=True,
                help_text='Apply a discount for any dealer registrations',
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name='dealerEvent',
                to='registration.Discount',
                verbose_name='Dealer Discount'),
        ),
        migrations.AlterField(
            model_name='event',
            name='dealerRegEnd',
            field=models.DateTimeField(verbose_name='Dealer Registration End'),
        ),
        migrations.AlterField(
            model_name='event',
            name='dealerRegStart',
            field=models.DateTimeField(
                help_text='Start date and time for dealer applications',
                verbose_name='Dealer Registration Start'),
        ),
        migrations.AlterField(
            model_name='event',
            name='default',
            field=models.BooleanField(
                default=False,
                help_text=
                'The first default event will be used as the basis for all current event configuration',
                verbose_name='Default'),
        ),
        migrations.AlterField(
            model_name='event',
            name='eventEnd',
            field=models.DateField(verbose_name='Event End Date'),
        ),
        migrations.AlterField(
            model_name='event',
            name='eventStart',
            field=models.DateField(verbose_name='Event Start Date'),
        ),
        migrations.AlterField(
            model_name='event',
            name='newStaffDiscount',
            field=models.ForeignKey(
                blank=True,
                help_text='Apply a discount for new staff registrations',
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name='newStaffEvent',
                to='registration.Discount',
                verbose_name='New Staff Discount'),
        ),
        migrations.AlterField(
            model_name='event',
            name='onlineRegEnd',
            field=models.DateTimeField(
                verbose_name='On-site Registration End'),
        ),
        migrations.AlterField(
            model_name='event',
            name='onlineRegStart',
            field=models.DateTimeField(
                help_text='Start time for /registration/onsite form',
                verbose_name='On-site Registration Start'),
        ),
        migrations.AlterField(
            model_name='event',
            name='staffDiscount',
            field=models.ForeignKey(
                blank=True,
                help_text='Apply a discount for any staff registrations',
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                related_name='staffEvent',
                to='registration.Discount',
                verbose_name='Staff Discount'),
        ),
        migrations.AlterField(
            model_name='event',
            name='staffRegEnd',
            field=models.DateTimeField(verbose_name='Staff Registration End'),
        ),
        migrations.AlterField(
            model_name='event',
            name='staffRegStart',
            field=models.DateTimeField(
                help_text='(Not currently enforced)',
                verbose_name='Staff Registration Start'),
        ),
        migrations.AlterField(
            model_name='orderitem',
            name='priceLevel',
            field=models.ForeignKey(
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                to='registration.PriceLevel'),
        ),
        migrations.AlterField(
            model_name='staff',
            name='attendee',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Attendee'),
        ),
        migrations.AlterField(
            model_name='staff',
            name='event',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Event'),
        ),
        migrations.AlterField(
            model_name='tablesize',
            name='event',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.CASCADE,
                to='registration.Event'),
        ),
        migrations.AddField(
            model_name='event',
            name='charity',
            field=models.ForeignKey(
                blank=True,
                null=True,
                on_delete=django.db.models.deletion.SET_NULL,
                to='registration.Charity'),
        ),
    ]
示例#3
0
class Migration(migrations.Migration):

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Character',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  primary_key=True,
                                  serialize=False,
                                  auto_created=True)),
                ('Name', models.CharField(max_length=100,
                                          blank=True,
                                          null=True)),
                ('Job', models.CharField(max_length=100, blank=True,
                                         null=True)),
            ],
        ),
        migrations.CreateModel(
            name='Game',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  primary_key=True,
                                  serialize=False,
                                  auto_created=True)),
                ('Name', models.CharField(max_length=100,
                                          blank=True,
                                          null=True)),
                ('Year', models.DateField()),
                ('GamePage', models.URLField(blank=True, null=True)),
                ('VideoLink', models.URLField(blank=True, null=True)),
                ('Publisher',
                 models.CharField(max_length=100, blank=True, null=True)),
            ],
        ),
        migrations.CreateModel(
            name='Movie',
            fields=[
                ('id',
                 models.AutoField(verbose_name='ID',
                                  primary_key=True,
                                  serialize=False,
                                  auto_created=True)),
                ('Name', models.CharField(max_length=100,
                                          blank=True,
                                          null=True)),
                ('DirectorName',
                 models.CharField(max_length=100, blank=True, null=True)),
                ('TrailerLink', models.URLField(blank=True, null=True)),
                ('Year', models.DateField()),
                ('ImdbPoint',
                 models.CharField(max_length=10, blank=True, null=True)),
                ('isCartoon', models.BooleanField()),
                ('Charecters',
                 models.ManyToManyField(to='starwars.Character')),
            ],
        ),
    ]
示例#4
0
class PerformanceMetric(models.Model):
    id = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100)
    description = models.TextField(null=True, blank=True)
示例#5
0
class Restaurant(models.Model):
    category = models.ForeignKey(Category, on_delete=models.SET_DEFAULT, default=3) # Category 모델 참조, on_delete-참조 모델 삭제시 행동 -> default 값으로 설정 한다. 
    restaurant_name = models.CharField(max_length = 100)
    restaurant_link = models.CharField(max_length = 500)
    restaurant_content = models.TextField()
    restaurant_keyword = models.CharField(max_length = 50)
示例#6
0
class YuanDongOrder(models.Model):
    key = models.CharField(max_length=100, blank=True, verbose_name='用户编号')
    shop_name = models.CharField(max_length=100, default="上海一汽丰田元东")
    server_sa = models.CharField(
        max_length=100, blank=True, verbose_name='服务专员')
    order_id = models.CharField(
        max_length=100, blank=True, verbose_name='订单编号')
    input_time = models.CharField(
        max_length=100, blank=True, verbose_name='订单日期')
    nickname = models.CharField(
        max_length=100, blank=True, verbose_name='客户姓名')
    mobile = models.CharField(max_length=100, blank=True, verbose_name='客户手机号')
    plate_number = models.CharField(
        max_length=100, blank=True, verbose_name='车牌号')
    vin_number = models.CharField(
        max_length=100, blank=True, verbose_name='vin')

    money = models.CharField(max_length=30, blank=True, verbose_name='费用')
    repair_type = models.CharField(
        max_length=30, blank=True, verbose_name='维修类型')
    item = models.TextField(blank=True, verbose_name='维修项目')
    #material = models.TextField(blank=True, verbose_name='维修零件')
    #mileage = models.CharField(max_length=100, default='0', verbose_name='出厂公里')
    push = models.BooleanField(default=False, verbose_name='推送状态')
    error = models.BooleanField(default=False, verbose_name='推送结果')

    def __str__(self):
        return self.order_id

    class Meta:
        verbose_name = '维修工单'
        verbose_name_plural = '维修工单'
示例#7
0
class Courses(models.Model):
    name = models.CharField(max_length=255)
    desc = models.TextField()
    created_at = models.DateTimeField(auto_now_add=True)
示例#8
0
class Project(models.Model):
    client = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="client", null=True, blank=True)
    dev = models.ForeignKey(Profile, on_delete=models.CASCADE, related_name="dev")
    title = models.CharField(max_length=50)
示例#9
0
class Page(models.Model):
    project = models.ForeignKey(Project, on_delete=models.CASCADE)
    title = models.CharField(max_length=50)
示例#10
0
class Quest(models.Model):
    """
    A django model representing a persistant quest bound to a user relation.
    """

    relation = models.ForeignKey(Relation)
    title = models.CharField(max_length=60)
    description = models.TextField(blank=True)
    creation_date = models.DateTimeField(auto_now_add=True)
    activation_date = models.DateTimeField(blank=True, null=True)
    deadline = models.DateTimeField(blank=True, null=True)
    RATINGS = (
        (1, '*'),
        (2, '**'),
        (3, '***'),
        (4, '****'),
        (5, '*****'),
    )
    #: Used to rated the degree of challenge associated with the quest.
    rating = models.PositiveSmallIntegerField(default=1, max_length=1, choices=RATINGS)
    bomb = models.BooleanField() # used to flag obligatory quests
    STATUS = (
        ('C', 'created'),
        ('A', 'accepted'),
        ('R', 'declined'),
        ('M', 'marked complete'),
        ('D', 'done'),
        ('F', 'failed'),
        ('X', 'deleted'),
    )
    status = models.CharField(default='C', max_length=1, choices=STATUS)
    objects = QuestManager() # custom django quest manager

    def __unicode__(self):
        """Returns the unicode string representation of the quest."""
        return self.title

    def get_absolute_url(self):
        """Returns the absolute url of the quest as a string."""
        return reverse('quests:detail', args=[self.pk])

    def is_active(self):
        """Returns True if this quest is active, False otherwise."""
        return self.status in ('A')

    def set_active(self):
        """Activates the quest and updates its activation date."""
        self.activation_date = timezone.now()
        self.status = 'A'

    def activate(self):
        """
        Activates the quest, updates it's activation date
        and sets the deadline to 7 days after activation.
        """
        self.status = 'A'
        self.activation_date = timezone.now()
        self.deadline = timezone.now()+timedelta(days=7)

    def is_overdue(self):
        """
        Checks if the quest is overdue.
        True if overdue.
        False if not.
        """
        today = timezone.now().date()
        deadline = self.deadline
        if deadline and today > deadline.date():
            return True
        else:
            return False

    def fail(self):
        """
        Fails the quest,
        updates the relation balance if it was a forced quest
        and informs owner and quester.
        """

        deduction = 0
        loss_message = ""
        if self.bomb:
            if self.relation.balance >= self.rating:
                self.relation.balance -= self.rating
                self.relation.save()
                deduction = self.rating
                loss_message = "You lost %s carrot%s." % (deduction, "s"[deduction==1:])
            else:
                defuction = self.relation.balance
        self.status = 'F'
        self.save()
        # notify owner
        pm_write(
            sender=self.relation.quester,
            recipient=self.relation.owner,
            subject="Quest %s has failed. %s lost %s carrot%s." % (
                self.title, self.relation.quester.title(), deduction, "s"[deduction==1:]),
            body=""
            )
        # notify quester
        pm_write(
            sender=self.relation.owner,
            recipient=self.relation.quester,
            subject="Quest %s has failed. %s" % (self.title, loss_message),
            body=""
            )
    
    def get_deadline_html(self):
        """Returns the color coded html representation of the quest deadline as a string."""
        if not self.deadline:
            return "-"
        today = timezone.now().date()
        deadline = self.deadline.date()
        warning_days = 1
        template = '<span id="deadline-%s">%s</span>'
        html = ""
        # render date in color depending on time left
        if today == deadline: # due
            html = template % ("due", deadline)
        elif today < deadline: # not yet due
            if (deadline - today).days <= warning_days: # soon due
                html = template % ("soon-due", deadline)
            else: # not due
                html = template % ("not-due", deadline)
        else: # over due
            html = template % ("over-due", deadline)
        return  mark_safe(html)

    def get_rating_html(self):
        """
        Returns the html representation of the quest rating as a string.
        The code displays 1-5 carrot images
        and a bomb image if the quest bomb flag is set.
        """
        rating = self.rating
        img_html = '<img src=%simages/carrot.png>' % settings.STATIC_URL
        html = ""
        if rating <= 5:
            html = img_html * rating
        else:
            html = '%s x %s' % (img_html, rating)
        if self.bomb:
            html += " " + self.get_bomb_html()
        return mark_safe(html)

    def get_bomb_html(self):
        """
        Returns the html representation of the quest bomb flag as a string.
        The code contains is an image path for the bomb or an empty string.
        """
        bomb = self.bomb
        img_html = '<img src=%simages/bomb.png>' % settings.STATIC_URL
        html = ""
        if bomb:
            html = img_html
        return mark_safe(html)

    def get_description_html(self):
        """Returns the quest description as a string or a hyphen if not set."""
        if self.description:
            return self.description
        else:
            return "-"
示例#11
0
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    full_name = models.CharField(max_length=50)
    email = models.EmailField(max_length=50, unique=True)
    user_type = models.CharField(max_length=10, choices=TYPES)
示例#12
0
class Item(models.Model):
    name = models.CharField(max_length=50)
    desc = models.TextField()

    def __str__(self):
        return self.name
示例#13
0
class Customer(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    phone = models.CharField(max_length=12, blank=True)
    shipping_address = models.CharField(max_length=100, blank=True)
示例#14
0
class Task(models.Model):
    title = models.CharField(max_length=256)
    desc = models.TextField(blank=True)

    def set_date_or_time(self, op_class, v, op_code):
        if v is None:
            return
        op = op_class()
        op.op_code = op_code
        op.task = self
        op.value = v
        op.save()

    def set_date(self, d, op_code):
        self.set_date_or_time(TaskDateOperation, d, op_code)

    def set_time(self, d, op_code):
        self.set_date_or_time(TaskTimeOperation, d, op_code)



    def get_operation_value(self, op_class, op_code):
        ops = op_class.objects.filter(task=self, op_code=op_code).order_by('created')
        if ops:
            return ops[0].value
        return None

    def get_date_operation_value(self, op_code):
        return self.get_operation_value(TaskDateOperation, op_code)

    def get_time_operation_value(self, op_code):
        return self.get_operation_value(TaskTimeOperation, op_code)

    @property
    def date_sp(self):
        return self.get_date_operation_value(TaskOperation.OP_SET_STR_PLAN)

    @property
    def date_ep(self):
        return self.get_date_operation_value(TaskOperation.OP_SET_END_PLAN)

    @property
    def date_sa(self):
        return self.get_date_operation_value(TaskOperation.OP_SET_STR_ACTU)

    @property
    def date_ea(self):
        return self.get_date_operation_value(TaskOperation.OP_SET_END_ACTU)

    @property
    def time_sp(self):
        return self.get_time_operation_value(TaskOperation.OP_SET_STR_PLAN)

    @property
    def time_ep(self):
        return self.get_time_operation_value(TaskOperation.OP_SET_END_PLAN)

    @property
    def time_sa(self):
        return self.get_time_operation_value(TaskOperation.OP_SET_STR_ACTU)

    @property
    def time_ea(self):
        return self.get_time_operation_value(TaskOperation.OP_SET_END_ACTU)

    
    def __unicode__(self):
        return self.title
示例#15
0
class Patient(models.Model):
    name = models.CharField(max_length=100)
    medications = models.ManyToManyField(Medication, related_name='medications', blank=True)
示例#16
0
class Migration(migrations.Migration):

    initial = True

    dependencies = []

    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=50,
                                  verbose_name='\u8bfe\u7a0b\u540d')),
                ('desc',
                 models.CharField(max_length=300,
                                  verbose_name='\u8bfe\u7a0b\u63cf\u8ff0')),
                ('detail',
                 models.TextField(verbose_name='\u8bfe\u7a0b\u8be6\u60c5')),
                ('degree',
                 models.CharField(choices=[('cj', '\u521d\u7ea7'),
                                           ('zj', '\u4e2d\u7ea7'),
                                           ('gj', '\u9ad8\u7ea7')],
                                  max_length=2)),
                ('learn_times',
                 models.IntegerField(
                     default=0,
                     verbose_name='\u5b66\u4e60\u65f6\u957f(\u5206\u949f\u6570)'
                 )),
                ('students',
                 models.IntegerField(default=0,
                                     verbose_name='\u5b66\u4e60\u4eba\u6570')),
                ('fav_nums',
                 models.IntegerField(default=0,
                                     verbose_name='\u6536\u85cf\u4eba\u6570')),
                ('image',
                 models.ImageField(upload_to='courses/%Y/%m',
                                   verbose_name='\u5c01\u9762\u56fe')),
                ('click_nums',
                 models.IntegerField(default=0,
                                     verbose_name='\u70b9\u51fb\u6570')),
                ('add_time',
                 models.DateTimeField(
                     default=datetime.datetime.now,
                     verbose_name='\u6dfb\u52a0\u65f6\u95f4')),
            ],
            options={
                'verbose_name': '\u8bfe\u7a0b',
                'verbose_name_plural': '\u8bfe\u7a0b',
            },
        ),
        migrations.CreateModel(
            name='CourseResource',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name',
                 models.CharField(max_length=100,
                                  verbose_name='\u540d\u79f0')),
                ('download',
                 models.FileField(upload_to='course/resource/%Y/%m',
                                  verbose_name='\u8d44\u6e90\u6587\u4ef6')),
                ('add_time',
                 models.DateTimeField(
                     default=datetime.datetime.now,
                     verbose_name='\u6dfb\u52a0\u65f6\u95f4')),
                ('course',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='courses.Course',
                                   verbose_name='\u8bfe\u7a0b')),
            ],
            options={
                'verbose_name': '\u8bfe\u7a0b\u8d44\u6e90',
                'verbose_name_plural': '\u8bfe\u7a0b\u8d44\u6e90',
            },
        ),
        migrations.CreateModel(
            name='Lesson',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name',
                 models.CharField(max_length=100,
                                  verbose_name='\u7ae0\u8282\u540d')),
                ('add_time',
                 models.DateTimeField(
                     default=datetime.datetime.now,
                     verbose_name='\u6dfb\u52a0\u65f6\u95f4')),
                ('course',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='courses.Course',
                                   verbose_name='\u8bfe\u7a0b')),
            ],
            options={
                'verbose_name': '\u7ae0\u8282',
                'verbose_name_plural': '\u7ae0\u8282',
            },
        ),
        migrations.CreateModel(
            name='Video',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('name',
                 models.CharField(max_length=100,
                                  verbose_name='\u89c6\u9891\u540d')),
                ('add_time',
                 models.DateTimeField(
                     default=datetime.datetime.now,
                     verbose_name='\u6dfb\u52a0\u65f6\u95f4')),
                ('lesson',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='courses.Lesson',
                                   verbose_name='\u7ae0\u8282')),
            ],
            options={
                'verbose_name': '\u89c6\u9891',
                'verbose_name_plural': '\u89c6\u9891',
            },
        ),
    ]
示例#17
0
class Fornecedores(models.Model):
    name = models.CharField(max_length=50)
    products = models.ManyToManyField(Product)

    def __str__(self):
        return self.name + " " + self.products
class Migration(migrations.Migration):

    initial = True

    dependencies = [
    ]

    operations = [
        migrations.CreateModel(
            name='ProductsA',
            fields=[
                ('code', models.BigIntegerField(primary_key=True, serialize=False)),
                ('url', models.CharField(max_length=250)),
                ('product_name', models.CharField(max_length=250)),
                ('nutrition_grade_fr', models.CharField(max_length=1)),
                ('main_category', models.CharField(max_length=250)),
                ('main_category_fr', models.CharField(max_length=250)),
                ('image_small_url', models.CharField(max_length=250)),
            ],
            options={
                'verbose_name': 'Produits A',
                'db_table': 'products_A',
                'managed': True,
            },
        ),
        migrations.CreateModel(
            name='UserProducts',
            fields=[
                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
                ('username', models.CharField(max_length=150)),
                ('code', models.BigIntegerField()),
                ('url', models.CharField(max_length=250)),
                ('product_name', models.CharField(max_length=250)),
                ('nutrition_grade_fr', models.CharField(max_length=1)),
                ('main_category', models.CharField(max_length=250)),
                ('main_category_fr', models.CharField(max_length=250)),
                ('image_small_url', models.CharField(max_length=250)),
            ],
            options={
                'verbose_name': 'Produits utilisateur',
                'db_table': 'user_products',
                'managed': True,
            },
        ),
    ]
示例#19
0
class Aleady(models.Model):
    key = models.CharField(max_length=100)
    value = models.CharField(max_length=100)
示例#20
0
class User(AbstractUser):
    display_name = models.CharField(max_length=100, blank=True)
    about = models.TextField(blank=True)
示例#21
0
class Post(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField()
    create_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)
示例#22
0
文件: models.py 项目: dxcv/ForexWeb
class BackTest(models.Model):
    STATUS_CHOICES = (('DONE', 'DONE'), ('PROCESSING', 'PROCESSING'),
                      ('ERROR', 'ERROR'))
    strategy = models.ForeignKey(Strategy)
    Profit = models.CharField(max_length=100, null=True)
    MaxDrawdown = models.CharField(max_length=100, null=True)
    Sharp = models.CharField(max_length=100, null=True)
    Profitfactor = models.CharField(max_length=100, null=True)
    Winrate = models.CharField(max_length=100, null=True)
    Std = models.CharField(max_length=100, null=True)
    Mean = models.CharField(max_length=100, null=True)
    Buynumber = models.CharField(max_length=100, null=True)
    Buyprofit = models.CharField(max_length=100, null=True)
    Sellnumber = models.CharField(max_length=100, null=True)
    Sellprofit = models.CharField(max_length=100, null=True)
    task = models.CharField(max_length=100, null=True)
    error_info = models.TextField(max_length=1000, null=True)
    status = models.CharField(choices=STATUS_CHOICES,
                              max_length=50,
                              default='PROCESSING')
示例#23
0
class Category(models.Model):
    category_name = models.CharField(max_length = 100)
示例#24
0
class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Car',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('year', models.CharField(max_length=100)),
                ('make', models.CharField(max_length=100)),
                ('model', models.CharField(max_length=100)),
                ('trim', models.CharField(max_length=100)),
            ],
        ),
        migrations.CreateModel(
            name='User',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('username', models.CharField(max_length=80)),
                ('email', models.CharField(max_length=80)),
                ('password', models.CharField(max_length=80)),
            ],
        ),
        migrations.CreateModel(
            name='SellingFeatures',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('feat1', models.CharField(max_length=50)),
                ('feat2', models.CharField(max_length=50)),
                ('feat3', models.CharField(max_length=50)),
                ('feat4', models.CharField(max_length=50)),
                ('feat5', models.CharField(max_length=50)),
                ('feat6', models.CharField(max_length=50)),
                ('feat7', models.CharField(max_length=50)),
                ('feat8', models.CharField(max_length=50)),
                ('feat9', models.CharField(max_length=50)),
                ('feat10', models.CharField(max_length=50, null=True)),
                ('car',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   related_name='features',
                                   to='suresell.car')),
            ],
        ),
    ]
示例#25
0
class Migration(migrations.Migration):

    initial = True

    dependencies = []

    operations = [
        migrations.CreateModel(
            name='Book',
            fields=[
                ('bo_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('bo_name', models.CharField(max_length=30)),
                ('bo_price', models.DecimalField(decimal_places=2,
                                                 max_digits=6)),
                ('bo_type', models.CharField(max_length=20)),
                ('bo_publisher', models.CharField(max_length=30)),
                ('bo_author', models.CharField(max_length=20)),
                ('bo_introduce', models.TextField()),
                ('bo_ptime', models.DateField(auto_now_add=True)),
                ('bo_operator', models.CharField(max_length=20)),
                ('bo_rukutime', models.DateField(auto_now_add=True)),
                ('bo_number', models.PositiveIntegerField()),
            ],
            options={
                'db_table': 't_book',
            },
        ),
        migrations.CreateModel(
            name='Borrow',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('start_time', models.DateField(auto_now_add=True)),
                ('end_time', models.DateField(auto_now_add=True)),
                ('registrar', models.CharField(max_length=20)),
                ('book',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Book')),
            ],
            options={
                'db_table': 't_borrow',
            },
        ),
        migrations.CreateModel(
            name='Clazz',
            fields=[
                ('cla_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False)),
                ('cla_name', models.CharField(max_length=20, unique=True)),
            ],
            options={
                'db_table': 't_clazz',
            },
        ),
        migrations.CreateModel(
            name='Course',
            fields=[
                ('cou_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('cou_name', models.CharField(max_length=20, unique=True)),
            ],
            options={
                'db_table': 't_course',
            },
        ),
        migrations.CreateModel(
            name='Grade',
            fields=[
                ('gr_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('gr_name', models.CharField(max_length=20, unique=True)),
            ],
            options={
                'db_table': 't_grade',
            },
        ),
        migrations.CreateModel(
            name='HeadTeacher',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('rkDATE', models.CharField(max_length=50)),
                ('clazz',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to='login.Clazz')),
            ],
            options={
                'db_table': 't_headTeacher',
            },
        ),
        migrations.CreateModel(
            name='Major',
            fields=[
                ('ma_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('ma_name', models.CharField(max_length=20, unique=True)),
            ],
            options={
                'db_table': 't_major',
            },
        ),
        migrations.CreateModel(
            name='Stu',
            fields=[
                ('st_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('st_name', models.CharField(max_length=10)),
                ('st_gender', models.CharField(max_length=10)),
                ('st_age', models.PositiveIntegerField()),
                ('st_nation', models.CharField(max_length=10)),
                ('st_political', models.CharField(max_length=10)),
                ('st_birth', models.DateField()),
                ('st_SFZ', models.CharField(max_length=20)),
                ('st_phone', models.CharField(max_length=20)),
                ('st_addr', models.TextField()),
                ('st_clazz',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Clazz')),
            ],
            options={
                'db_table': 't_stu',
            },
        ),
        migrations.CreateModel(
            name='StuCourse',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('sc_score', models.DecimalField(decimal_places=1,
                                                 max_digits=4)),
                ('sc_type', models.CharField(max_length=20)),
                ('cls',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Clazz')),
                ('course',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Course')),
                ('student',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Stu')),
            ],
            options={
                'db_table': 't_stuCourse',
            },
        ),
        migrations.CreateModel(
            name='StuRegister',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('start_score', models.PositiveIntegerField()),
                ('start_time', models.DateField()),
                ('clazz',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Clazz')),
                ('student',
                 models.OneToOneField(
                     on_delete=django.db.models.deletion.CASCADE,
                     to='login.Stu')),
            ],
            options={
                'db_table': 't_stuRegister',
            },
        ),
        migrations.CreateModel(
            name='Teacher',
            fields=[
                ('te_id',
                 models.PositiveIntegerField(primary_key=True,
                                             serialize=False,
                                             unique=True)),
                ('te_name', models.CharField(max_length=10)),
                ('te_gender', models.CharField(max_length=10)),
                ('te_age', models.PositiveIntegerField()),
                ('te_nation', models.CharField(max_length=10)),
                ('te_marriage', models.CharField(max_length=10)),
                ('te_political', models.CharField(max_length=10)),
                ('te_birth', models.DateField()),
                ('te_SFZ', models.PositiveIntegerField()),
                ('te_education', models.CharField(max_length=20)),
                ('te_phone', models.PositiveIntegerField()),
                ('work_content', models.TextField()),
                ('te_grade',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Grade')),
                ('te_major',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Major')),
            ],
            options={
                'db_table': 't_teacher',
            },
        ),
        migrations.CreateModel(
            name='TeacherCourse',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('rkDATE', models.CharField(max_length=50)),
                ('lizhiDATE', models.CharField(max_length=50)),
                ('course',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Course')),
                ('teacher',
                 models.ForeignKey(on_delete=django.db.models.deletion.CASCADE,
                                   to='login.Teacher')),
            ],
            options={
                'db_table': 't_teacherCourse',
            },
        ),
        migrations.CreateModel(
            name='User',
            fields=[
                ('id', models.AutoField(primary_key=True, serialize=False)),
                ('user_name', models.CharField(max_length=20, unique=True)),
                ('user_pwd', models.CharField(max_length=20)),
            ],
            options={
                'db_table': 't_user',
            },
        ),
        migrations.AddField(
            model_name='headteacher',
            name='teacher',
            field=models.OneToOneField(
                on_delete=django.db.models.deletion.CASCADE,
                to='login.Teacher'),
        ),
        migrations.AddField(
            model_name='clazz',
            name='cla_grade',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to='login.Grade'),
        ),
        migrations.AddField(
            model_name='clazz',
            name='cla_major',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to='login.Major'),
        ),
        migrations.AddField(
            model_name='borrow',
            name='student',
            field=models.ForeignKey(
                on_delete=django.db.models.deletion.CASCADE, to='login.Stu'),
        ),
    ]
class Migration(migrations.Migration):

    dependencies = [
        ('fit', '0011_heart2'),
    ]

    operations = [
        migrations.CreateModel(
            name='Heart3',
            fields=[
                ('id',
                 models.AutoField(auto_created=True,
                                  primary_key=True,
                                  serialize=False,
                                  verbose_name='ID')),
                ('image_id', models.DateField(blank=True,
                                              verbose_name='イメージid')),
                ('heart_image_url',
                 models.URLField(blank=True, verbose_name='心拍画像URL')),
            ],
        ),
        migrations.CreateModel(
            name='Sleep',
            fields=[
                ('dateOfSleep',
                 models.DateField(primary_key=True,
                                  serialize=False,
                                  verbose_name='睡眠日')),
                ('deep',
                 models.DecimalField(decimal_places=2,
                                     default=0.0,
                                     max_digits=6,
                                     verbose_name='deep')),
                ('light',
                 models.DecimalField(decimal_places=2,
                                     default=0.0,
                                     max_digits=6,
                                     verbose_name='light')),
                ('rem',
                 models.DecimalField(decimal_places=2,
                                     default=0.0,
                                     max_digits=6,
                                     verbose_name='rem')),
                ('wake',
                 models.DecimalField(decimal_places=2,
                                     default=0.0,
                                     max_digits=6,
                                     verbose_name='wake')),
                ('sleep_time',
                 models.DecimalField(decimal_places=2,
                                     default=0.0,
                                     max_digits=6,
                                     verbose_name='sleep_time')),
                ('image_url', models.URLField(blank=True,
                                              verbose_name='画像URL')),
                ('bedtime',
                 models.CharField(blank=True,
                                  max_length=23,
                                  verbose_name='就寝時刻')),
            ],
        ),
        migrations.CreateModel(
            name='Work3',
            fields=[
                ('work_date',
                 models.DateField(primary_key=True,
                                  serialize=False,
                                  verbose_name='作業日')),
                ('start_time',
                 models.DateTimeField(null=True, verbose_name='開始時刻')),
                ('end_time',
                 models.DateTimeField(null=True, verbose_name='終了時刻')),
                ('workhr',
                 models.CharField(blank=True,
                                  max_length=10,
                                  verbose_name='勤務時間')),
                ('comment',
                 models.CharField(blank=True,
                                  max_length=255,
                                  verbose_name='コメント')),
            ],
        ),
        migrations.AddField(
            model_name='heart3',
            name='heart_date',
            field=models.OneToOneField(
                on_delete=django.db.models.deletion.CASCADE, to='fit.Sleep'),
        ),
    ]
示例#27
0
class ToolPhoto(models.Model):
    url = models.CharField(max_length=200)
    tool = models.ForeignKey(Tool, on_delete=models.CASCADE)

    def __str__(self):
        return f"Photo for tool_id: {self.tool_id} @{self.url}"
示例#28
0
class Medication(models.Model):
    name = models.CharField(max_length=100, unique=True)
示例#29
0
class Order(models.Model):
    class Meta:
        managed = False
        db_table = 'ps17_orders'

    id_order = models.PositiveIntegerField(primary_key=True,editable=False,db_column=None)
    reference = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    id_order_state = models.PositiveIntegerField(blank=True, null=True,editable=False,)
    order_state = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    shipping_number = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    firstname_customer = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    lastname_customer = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    note = models.TextField(blank=True, null=True,editable=False,)
    firstname = models.CharField(max_length=255, blank=True, null=True,editable=False,)
    lastname = models.CharField(max_length=255, blank=True, editable=False,)
    email = models.CharField(max_length=255, blank=True, editable=False,)
    postcode = models.CharField(max_length=255, blank=True, editable=False,)
    address1 = models.CharField(max_length=255, blank=True, editable=False,)
    address2 = models.CharField(max_length=255, blank=True, editable=False,)
    city = models.CharField(max_length=255, blank=True, editable=False,)
    phone = models.CharField(max_length=255, blank=True, editable=False,)
    country = models.CharField(max_length=255, blank=True, editable=False,)
    currency_code = models.CharField(max_length=3, blank=True, editable=False,)
    total_paid  = models.FloatField(blank=True, editable=False,)
    total_products_wt   = models.FloatField(blank=True, editable=False,)
    total_shipping_tax_incl  = models.FloatField(blank=True, editable=False,)
    date_add  = models.DateTimeField(blank=True, editable=False,)
    date_upd  = models.DateTimeField(blank=True, editable=False,)
    id_country = models.PositiveIntegerField(blank=True, editable=False,)
    carrier = models.CharField(max_length=255, blank=True, editable=False,)
    is_new = models.PositiveIntegerField(blank=True, editable=False,)

    @staticmethod
    def SQL(one=False):
        sql = """
    SELECT 
        id_order,
        reference,
        o.current_state as id_order_state
        ,(select name from ps17_order_state_lang where id_lang=1 and id_order_state=o.current_state) order_state
        ,o.shipping_number
        ,c.firstname as firstname_customer,
        c.lastname as lastname_customer,
        c.note
        ,a.firstname,
        a.lastname
        ,c.email,
        a.postcode,
        a.address1,
        a.address2,
        a.city,
        a.phone
        ,(select name from ps17_country_lang where id_lang=1 and id_country=a.id_country) country
        ,iso_code as currency_code
        ,total_paid ,total_products_wt ,total_shipping_tax_incl,o.date_add,o.date_upd
        ,o.id_customer,o.id_address_delivery,a.id_country
        ,ca.name as carrier
        ,IF((SELECT so.id_order FROM `ps17_orders` so WHERE so.id_customer = o.id_customer AND so.id_order < o.id_order LIMIT 1) > 0, 0, 1) as is_new
        FROM `ps17_orders` o
        JOIN ps17_customer c on o.id_customer=c.id_customer
        JOIN ps17_address a on id_address_delivery=a.id_address
        join ps17_carrier ca on ca.id_carrier=o.id_carrier
        join ps17_currency cu on cu.id_currency=o.id_currency
        WHERE o.current_state in (2,3,17,20,21,31,39,40)
"""
        if one:
            sql += " AND o.id_order=%s " 
        else:
            sql += " ORDER BY id_order DESC "

        return sql        
示例#30
0
class Library(models.Model):
    code = models.CharField(max_length=128,
                            unique=True,
                            validators=[validate_library_code])
    genome = models.ForeignKey(
        Genome,
        on_delete=models.PROTECT,
        help_text="The genome against which the sequence" +
        " data from this library should be aligned.")
    sample = models.ForeignKey(Sample, on_delete=models.PROTECT)
    antibody = models.ForeignKey(Antibody,
                                 on_delete=models.PROTECT,
                                 null=True,
                                 blank=True)
    factor = models.ForeignKey(Factor,
                               on_delete=models.PROTECT,
                               null=True,
                               blank=True)
    condition = models.ForeignKey(Condition,
                                  on_delete=models.PROTECT,
                                  null=True,
                                  blank=True)
    bad = models.BooleanField(default=False)
    release_worthy = models.BooleanField(default=False)
    projects = models.ManyToManyField(Project,
                                      db_table='library_project',
                                      related_name='libraries')
    libtype = models.ForeignKey(Libtype, on_delete=models.PROTECT)
    barcode = models.CharField(max_length=32, null=True, blank=True)
    linkerset = models.ForeignKey(Linkerset,
                                  on_delete=models.PROTECT,
                                  null=True,
                                  blank=True)
    chipsample = models.CharField(max_length=255, null=True, blank=True)
    paired = models.BooleanField(default=False)
    adapter = models.ForeignKey(Adapter,
                                on_delete=models.PROTECT,
                                null=True,
                                blank=True,
                                related_name='libraries')
    adapter2 = models.ForeignKey(Adapter,
                                 on_delete=models.PROTECT,
                                 null=True,
                                 blank=True,
                                 related_name='libraries2')
    platecode = models.CharField(max_length=32, null=True, blank=True)
    platecol = models.IntegerField(null=True, blank=True)
    platerow = models.CharField(max_length=1,
                                choices=[('A', 'A'), ('B', 'B'), ('C', 'C'),
                                         ('D', 'D'), ('E', 'E'), ('F', 'F'),
                                         ('G', 'G'), ('H', 'H')],
                                null=True,
                                blank=True)
    comment = models.TextField(null=True, blank=True)
    external_records = models.ManyToManyField(
        ExternalRecord,
        db_table='library_external_record',
        related_name='libraries')
    objects = LibraryManager()

    @property
    def filename_tag(self):
        """
    On-the-fly replacement for the old library description field, with
    the library code included for completeness.
    """
        fac = self.factor.name if self.factor else 'unk'
        ant = self.antibody.name if self.antibody else 'unk'
        ind = self.sample.name if self.sample.name != self.code else ''
        sta = self.sample.source.strain.name if self.sample.source.strain else ''

        tis = self.sample.tissue.name
        if self.condition is not None:
            tis = "%s_%s" % (tis, self.condition)
        gen = self.genome.code

        # Here we pull out unnecessary duplication of the tissue name
        # which may have been introduced when generating a new sample name
        # (see osqpipe.pipeline.library).
        ind = string.replace(ind, tis, '')

        # Try to strip out not just trailing space, but some other characters we might use at a later date.
        ind = re.sub('[- _/;:.,]$', '', ind)

        return ("%s_%s_%s_%s_%s%s%s" %
                (self.code, fac, tis, ant, gen, sta, ind))

    def __unicode__(self):
        return self.code

    class Meta:
        db_table = u'library'
        verbose_name_plural = 'libraries'
        ordering = ['code']