mirror of
https://github.com/bookwyrm-social/bookwyrm.git
synced 2025-01-03 13:58:43 +00:00
Adds form and models for reading goal
This commit is contained in:
parent
3866523d57
commit
b648012af5
4 changed files with 67 additions and 1 deletions
|
@ -188,3 +188,8 @@ class ShelfForm(CustomForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.Shelf
|
model = models.Shelf
|
||||||
fields = ['user', 'name', 'privacy']
|
fields = ['user', 'name', 'privacy']
|
||||||
|
|
||||||
|
class GoalForm(CustomForm):
|
||||||
|
class Meta:
|
||||||
|
model = models.AnnualGoal
|
||||||
|
fields = ['user', 'year', 'goal']
|
||||||
|
|
31
bookwyrm/migrations/0036_annualgoal.py
Normal file
31
bookwyrm/migrations/0036_annualgoal.py
Normal file
|
@ -0,0 +1,31 @@
|
||||||
|
# Generated by Django 3.0.7 on 2021-01-15 23:01
|
||||||
|
|
||||||
|
import bookwyrm.models.fields
|
||||||
|
from django.conf import settings
|
||||||
|
from django.db import migrations, models
|
||||||
|
import django.db.models.deletion
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('bookwyrm', '0035_edition_edition_rank'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='AnnualGoal',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
|
||||||
|
('created_date', models.DateTimeField(auto_now_add=True)),
|
||||||
|
('updated_date', models.DateTimeField(auto_now=True)),
|
||||||
|
('remote_id', bookwyrm.models.fields.RemoteIdField(max_length=255, null=True, validators=[bookwyrm.models.fields.validate_remote_id])),
|
||||||
|
('goal', bookwyrm.models.fields.IntegerField()),
|
||||||
|
('year', models.IntegerField(default=2021)),
|
||||||
|
('user', bookwyrm.models.fields.ForeignKey(on_delete=django.db.models.deletion.PROTECT, to=settings.AUTH_USER_MODEL)),
|
||||||
|
],
|
||||||
|
options={
|
||||||
|
'unique_together': {('user', 'year')},
|
||||||
|
},
|
||||||
|
),
|
||||||
|
]
|
|
@ -17,7 +17,7 @@ from .readthrough import ReadThrough
|
||||||
|
|
||||||
from .tag import Tag, UserTag
|
from .tag import Tag, UserTag
|
||||||
|
|
||||||
from .user import User, KeyPair
|
from .user import User, KeyPair, AnnualGoal
|
||||||
from .relationship import UserFollows, UserFollowRequest, UserBlocks
|
from .relationship import UserFollows, UserFollowRequest, UserBlocks
|
||||||
from .federated_server import FederatedServer
|
from .federated_server import FederatedServer
|
||||||
|
|
||||||
|
|
|
@ -6,6 +6,7 @@ from django.apps import apps
|
||||||
from django.contrib.auth.models import AbstractUser
|
from django.contrib.auth.models import AbstractUser
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from django.dispatch import receiver
|
from django.dispatch import receiver
|
||||||
|
from django.utils import timezone
|
||||||
|
|
||||||
from bookwyrm import activitypub
|
from bookwyrm import activitypub
|
||||||
from bookwyrm.connectors import get_data
|
from bookwyrm.connectors import get_data
|
||||||
|
@ -221,6 +222,35 @@ class KeyPair(ActivitypubMixin, BookWyrmModel):
|
||||||
return activity_object
|
return activity_object
|
||||||
|
|
||||||
|
|
||||||
|
class AnnualGoal(BookWyrmModel):
|
||||||
|
''' set a goal for how many books you read in a year '''
|
||||||
|
user = fields.ForeignKey('User', on_delete=models.PROTECT)
|
||||||
|
goal = fields.IntegerField()
|
||||||
|
year = models.IntegerField(default=timezone.now().year)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
''' unqiueness constraint '''
|
||||||
|
unique_together = ('user', 'year')
|
||||||
|
|
||||||
|
def get_remote_id(self):
|
||||||
|
''' put the year in the path '''
|
||||||
|
return '%s/goal/%d' % (self.user.remote_id, self.year)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def books(self):
|
||||||
|
''' the books you've read this year '''
|
||||||
|
return self.user.readthrough_set.filter(
|
||||||
|
finish_date__year__gte=self.year
|
||||||
|
).order_by('finish_date').all()
|
||||||
|
|
||||||
|
@property
|
||||||
|
def book_count(self):
|
||||||
|
''' how many books you've read this year '''
|
||||||
|
return self.user.readthrough_set.filter(
|
||||||
|
finish_date__year__gte=self.year).count()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@receiver(models.signals.post_save, sender=User)
|
@receiver(models.signals.post_save, sender=User)
|
||||||
#pylint: disable=unused-argument
|
#pylint: disable=unused-argument
|
||||||
def execute_after_save(sender, instance, created, *args, **kwargs):
|
def execute_after_save(sender, instance, created, *args, **kwargs):
|
||||||
|
|
Loading…
Reference in a new issue