Skip to content

Commit 72ac866

Browse files
authored
Merge pull request #19 from khoshov/feature/django-models
feat: add models
2 parents c1aa983 + 03ae8b5 commit 72ac866

File tree

3 files changed

+147
-7
lines changed

3 files changed

+147
-7
lines changed

apps/books/models.py

Lines changed: 146 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1,146 @@
1-
# Create your models here.
1+
from django.db import models
2+
from django.contrib.auth import get_user_model
3+
from django_extensions.db.models import TimeStampedModel
4+
5+
User = get_user_model()
6+
7+
8+
class Publisher(models.Model):
9+
name = models.CharField(
10+
"Название издательства",
11+
max_length=255,
12+
)
13+
website = models.URLField(
14+
"Сайт издательства",
15+
max_length=255,
16+
blank=True,
17+
)
18+
19+
class Meta:
20+
verbose_name = "Издательство"
21+
verbose_name_plural = "Издательства"
22+
23+
def __str__(self):
24+
return self.name
25+
26+
27+
class Author(models.Model):
28+
first_name = models.CharField(
29+
"Имя автора",
30+
max_length=100,
31+
)
32+
last_name = models.CharField(
33+
"Фамилия автора",
34+
max_length=100,
35+
)
36+
bio = models.TextField(
37+
"Биография",
38+
blank=True,
39+
)
40+
41+
class Meta:
42+
verbose_name = "Автор"
43+
verbose_name_plural = "Авторы"
44+
45+
def __str__(self):
46+
return f"{self.first_name} {self.last_name}"
47+
48+
49+
class Tag(models.Model):
50+
name = models.CharField(
51+
"Название тега",
52+
max_length=100,
53+
unique=True,
54+
)
55+
slug = models.SlugField(
56+
"URL-имя",
57+
max_length=100,
58+
unique=True,
59+
)
60+
color = models.CharField(
61+
"Цвет",
62+
max_length=20,
63+
)
64+
65+
class Meta:
66+
verbose_name = "Тег"
67+
verbose_name_plural = "Теги"
68+
69+
def __str__(self):
70+
return self.name
71+
72+
73+
class Book(TimeStampedModel):
74+
title = models.CharField(
75+
"Название книги",
76+
max_length=255,
77+
)
78+
description = models.TextField(
79+
"Описание книги",
80+
)
81+
published_at = models.DateField(
82+
"Дата публикации",
83+
)
84+
isbn_code = models.CharField(
85+
"ISBN",
86+
max_length=20,
87+
unique=True,
88+
)
89+
total_pages = models.IntegerField(
90+
"Количество страниц",
91+
)
92+
cover_image = models.URLField(
93+
"Обложка книги",
94+
max_length=255,
95+
)
96+
language = models.CharField(
97+
"Язык",
98+
max_length=50,
99+
)
100+
101+
author = models.ManyToManyField(
102+
Author,
103+
verbose_name="Авторы",
104+
related_name="books",
105+
)
106+
publisher = models.ForeignKey(
107+
Publisher,
108+
verbose_name="Издательство",
109+
on_delete=models.CASCADE,
110+
related_name="books",
111+
)
112+
tags = models.ManyToManyField(
113+
Tag,
114+
verbose_name="Теги",
115+
related_name="books",
116+
)
117+
118+
class Meta:
119+
verbose_name = "Книга"
120+
verbose_name_plural = "Книги"
121+
122+
def __str__(self):
123+
return self.title
124+
125+
126+
class Comment(TimeStampedModel):
127+
text = models.TextField(
128+
"Комментарий",
129+
)
130+
131+
user = models.ForeignKey(
132+
User,
133+
verbose_name="Пользователь",
134+
on_delete=models.CASCADE,
135+
related_name="comments",
136+
)
137+
book = models.ForeignKey(
138+
Book,
139+
verbose_name="Книга",
140+
on_delete=models.CASCADE,
141+
related_name="comments",
142+
)
143+
144+
class Meta:
145+
verbose_name = "Комментарий"
146+
verbose_name_plural = "Комментарии"

config/settings.py

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515
# Build paths inside the project like this: BASE_DIR / 'subdir'.
1616
BASE_DIR = Path(__file__).resolve().parent.parent
1717

18-
1918
# Quick-start development settings - unsuitable for production
2019
# See https://docs.djangoproject.com/en/5.2/howto/deployment/checklist/
2120

@@ -27,7 +26,6 @@
2726

2827
ALLOWED_HOSTS = []
2928

30-
3129
# Application definition
3230

3331
INSTALLED_APPS = [
@@ -38,6 +36,7 @@
3836
"django.contrib.messages",
3937
"django.contrib.staticfiles",
4038
"apps.books.apps.BooksConfig",
39+
"django_extensions",
4140
]
4241

4342
MIDDLEWARE = [
@@ -69,7 +68,6 @@
6968

7069
WSGI_APPLICATION = "config.wsgi.application"
7170

72-
7371
# Database
7472
# https://docs.djangoproject.com/en/5.2/ref/settings/#databases
7573

@@ -80,7 +78,6 @@
8078
}
8179
}
8280

83-
8481
# Password validation
8582
# https://docs.djangoproject.com/en/5.2/ref/settings/#auth-password-validators
8683

@@ -99,7 +96,6 @@
9996
},
10097
]
10198

102-
10399
# Internationalization
104100
# https://docs.djangoproject.com/en/5.2/topics/i18n/
105101
LANGUAGE_CODE = "en"
@@ -111,7 +107,6 @@
111107
USE_I18N = True
112108
USE_TZ = True
113109

114-
115110
# Static files (CSS, JavaScript, Images)
116111
# https://docs.djangoproject.com/en/5.2/howto/static-files/
117112

requirements.txt

44 Bytes
Binary file not shown.

0 commit comments

Comments
 (0)