Add book to database
This commit is contained in:
parent
6b02d779fd
commit
4c4011ba75
5 changed files with 101 additions and 29 deletions
|
@ -2,18 +2,31 @@
|
|||
from django.db import models
|
||||
from django.contrib.auth.models import AbstractUser
|
||||
from django.contrib.postgres.fields import JSONField
|
||||
from Crypto.PublicKey import RSA
|
||||
from Crypto import Random
|
||||
from datetime import datetime
|
||||
|
||||
class User(AbstractUser):
|
||||
''' a user who wants to read books '''
|
||||
private_key = models.CharField(max_length=255)
|
||||
public_key = models.CharField(max_length=255)
|
||||
webfinger = JSONField(max_length=255)
|
||||
actor = JSONField(max_length=255, blank=True, null=True)
|
||||
api_key = models.CharField(max_length=255, blank=True, null=True)
|
||||
followers = models.CharField(max_length=255, blank=True, null=True)
|
||||
messages = models.CharField(max_length=255, blank=True, null=True)
|
||||
created_date = models.DateTimeField()
|
||||
updated_date = models.DateTimeField(blank=True, null=True)
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
followers = models.ManyToManyField('self', symmetrical=False)
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
# give a new user keys
|
||||
if not self.private_key:
|
||||
random_generator = Random.new().read
|
||||
key = RSA.generate(1024, random_generator)
|
||||
self.private_key = key
|
||||
self.public_key = key.publickey()
|
||||
if not self.id:
|
||||
self.created_date = datetime.now()
|
||||
self.updated_date = datetime.now()
|
||||
|
||||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class Message(models.Model):
|
||||
|
@ -22,6 +35,8 @@ class Message(models.Model):
|
|||
author = models.ForeignKey('User', on_delete=models.PROTECT)
|
||||
name = models.CharField(max_length=255)
|
||||
content = JSONField(max_length=5000)
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
|
||||
class Meta:
|
||||
abstract = True
|
||||
|
@ -38,6 +53,9 @@ class Shelf(models.Model):
|
|||
name = models.CharField(max_length=100)
|
||||
user = models.ForeignKey('User', on_delete=models.PROTECT)
|
||||
editable = models.BooleanField(default=True)
|
||||
books = models.ManyToManyField('Book', symmetrical=False)
|
||||
created_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class Book(models.Model):
|
||||
|
@ -45,12 +63,15 @@ class Book(models.Model):
|
|||
id = models.AutoField(primary_key=True)
|
||||
openlibary_key = models.CharField(max_length=255)
|
||||
data = JSONField()
|
||||
added_date = models.DateTimeField()
|
||||
updated_date = models.DateTimeField(blank=True, null=True)
|
||||
works = models.ManyToManyField('Work')
|
||||
added_by = models.ForeignKey('User', on_delete=models.PROTECT, blank=True, null=True)
|
||||
added_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class ShelfBooks(models.Model):
|
||||
''' many to many join table '''
|
||||
class Work(models.Model):
|
||||
id = models.AutoField(primary_key=True)
|
||||
shelf = models.ForeignKey('Shelf', on_delete=models.PROTECT)
|
||||
book = models.ForeignKey('Book', on_delete=models.PROTECT)
|
||||
openlibary_key = models.CharField(max_length=255)
|
||||
data = JSONField()
|
||||
added_by = models.ForeignKey('User', on_delete=models.PROTECT, blank=True, null=True)
|
||||
added_date = models.DateTimeField(auto_now_add=True)
|
||||
updated_date = models.DateTimeField(auto_now=True)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue