Commit 8b6e41f08f72c206f8d38ab5bbdf5797aa03c7d7

Authored by Andrew Buss
1 parent a33d629b29
Exists in master

Added some helper model functions

Showing 3 changed files with 118 additions and 11 deletions Inline Diff

*~ 1 1 *~
venv* 2 2 venv*
*.pyc 3 3 *.pyc
.idea* 4 4 .idea*
.*.swp 5 5 .*.swp
6 *.sqlite3
flashy/flashcards/migrations/0001_initial.py View file @ 8b6e41f
File was created 1 # -*- coding: utf-8 -*-
2 from __future__ import unicode_literals
3
4 from django.db import models, migrations
5 from django.conf import settings
6
7
8 class Migration(migrations.Migration):
9
10 dependencies = [
11 migrations.swappable_dependency(settings.AUTH_USER_MODEL),
12 ]
13
14 operations = [
15 migrations.CreateModel(
16 name='Class',
17 fields=[
18 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
19 ('department', models.CharField(max_length=50)),
20 ('course_num', models.IntegerField()),
21 ('name', models.CharField(max_length=50)),
22 ('professor', models.CharField(max_length=50)),
23 ('quarter', models.CharField(max_length=4)),
24 ('members', models.ManyToManyField(to=settings.AUTH_USER_MODEL)),
25 ],
26 ),
27 migrations.CreateModel(
28 name='Flashcard',
29 fields=[
30 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
31 ('text', models.CharField(max_length=255)),
32 ('pushed', models.DateTimeField()),
33 ('material_date', models.DateTimeField()),
34 ('hidden', models.CharField(max_length=255, null=True, blank=True)),
35 ('associated_class', models.ForeignKey(to='flashcards.Class')),
36 ('author', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
37 ],
38 ),
39 migrations.CreateModel(
40 name='FlashcardMask',
41 fields=[
42 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
43 ('ranges', models.CharField(max_length=255)),
44 ],
45 ),
46 migrations.CreateModel(
47 name='UserFlashcard',
48 fields=[
49 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
50 ('pulled', models.DateTimeField(null=True)),
51 ('unpulled', models.DateTimeField(null=True)),
52 ('flashcard', models.ForeignKey(to='flashcards.Flashcard')),
53 ('mask', models.ForeignKey(to='flashcards.FlashcardMask')),
54 ('user', models.ForeignKey(to=settings.AUTH_USER_MODEL)),
55 ],
56 ),
57 migrations.CreateModel(
58 name='UserFlashCardReview',
59 fields=[
60 ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)),
61 ('when', models.DateTimeField()),
62 ('blanked_word', models.CharField(max_length=8)),
63 ('response', models.CharField(max_length=255, null=True, blank=True)),
64 ('correct', models.NullBooleanField()),
65 ('user_flashcard', models.ForeignKey(to='flashcards.UserFlashcard')),
66 ],
67 ),
68 migrations.AddField(
69 model_name='flashcard',
70 name='mask',
71 field=models.ForeignKey(to='flashcards.FlashcardMask', null=True),
72 ),
73 migrations.AddField(
flashy/flashcards/models.py View file @ 8b6e41f
1 from django.contrib.auth.models import User
from django.db import models 1 2 from django.db import models
2 3
4
class UserFlashcard(models.Model): 3 5 class UserFlashcard(models.Model):
""" 4 6 """
Represents the relationship between a user and a flashcard by: 5 7 Represents the relationship between a user and a flashcard by:
1. A user has a flashcard in their deck 6 8 1. A user has a flashcard in their deck
2. A user used to have a flashcard in their deck 7 9 2. A user used to have a flashcard in their deck
3. A user has a flashcard hidden from them 8 10 3. A user has a flashcard hidden from them
""" 9 11 """
user = models.ForeignKey(User) 10 12 user = models.ForeignKey(User)
mask = models.ForeignKey('FlashcardMask') 11 13 mask = models.ForeignKey('FlashcardMask')
pulled = models.DateTimeField() 12 14 pulled = models.DateTimeField(null=True)
flashcard = models.ForeignKey(Flashcard) 13 15 flashcard = models.ForeignKey('Flashcard')
unpulled = models.DateTimeField() 14 16 unpulled = models.DateTimeField(null=True)
15 17
18 class Meta:
19 unique_together = (('user', 'flashcard'),)
20 index_together = ["user", "flashcard"]
21 ordering = ['-pulled']
22
23 def is_hidden(self):
24 return not self.pulled
25
26 def is_active(self):
27 return self.pulled and not self.unpulled
28
29
class FlashcardMask(models.Model): 16 30 class FlashcardMask(models.Model):
ranges = models.CharField(max_length=255) 17 31 ranges = models.CharField(max_length=255)
18 32
33
class Flashcard(models.Model): 19 34 class Flashcard(models.Model):
text = models.CharField(max_length=255) 20 35 text = models.CharField(max_length=255)
associated_class = models.ForeignKey(Class) 21 36 associated_class = models.ForeignKey('Class')
pushed = models.DateTimeField() 22 37 pushed = models.DateTimeField()
material_date = models.DateTimeField() 23 38 material_date = models.DateTimeField()
previous = models.ForeignKey('Flashcard') 24 39 previous = models.ForeignKey('Flashcard', null=True)
author = models.ForeignKey('User') 25 40 author = models.ForeignKey(User)
hidden = models.CharField(null=True, max_length=255) 26 41 hidden = models.CharField(null=True, blank=True, max_length=255)
mask = models.ForeignKey(FlashcardMask) 27 42 mask = models.ForeignKey(FlashcardMask, null=True)
28 43
44 def is_visible_to(self, user):
45 try:
46 result = self.userflashcard_set.get(user=user)
47 return not result.is_hidden()
48 except UserFlashcard.DoesNotExist:
49 return not self.hidden
50
51 @classmethod
52 def cards_visible_to(cls, user):
53 return cls.objects.filter(hidden=False).exclude(userflashcard=user, userflashcard__pulled=None)
54
55
class UserFlashCardReview(models.Model): 29 56 class UserFlashCardReview(models.Model):
user_flashcard = models.ForeignKey(UserFlashcard) 30 57 user_flashcard = models.ForeignKey(UserFlashcard)
when = models.DateTimeField() 31 58 when = models.DateTimeField()
blanked_word = models.CharField(max_length=8) 32 59 blanked_word = models.CharField(max_length=8)
response = models.CharField(max_length=255, blank=True, null=True) 33 60 response = models.CharField(max_length=255, blank=True, null=True)
correct = models.NullBooleanField() 34 61 correct = models.NullBooleanField()
62
35 63
class Class(models.Model): 36 64 class Class(models.Model):
department = models.CharField(max_length=50) 37 65 department = models.CharField(max_length=50)
course_num = models.IntegerField() 38 66 course_num = models.IntegerField()
name = models.CharField(max_length=50) 39 67 name = models.CharField(max_length=50)
professor = models.CharField(max_length=50) 40 68 professor = models.CharField(max_length=50)
quarter = models.CharField(max_length=4) 41 69 quarter = models.CharField(max_length=4)
members = models.ManyToManyField(User) 42 70 members = models.ManyToManyField(User)
43 71