diff --git a/boofilsic/settings.py b/boofilsic/settings.py index 88c60a26..010ac5b9 100644 --- a/boofilsic/settings.py +++ b/boofilsic/settings.py @@ -86,7 +86,7 @@ if DEBUG: 'NAME': 'test', 'USER': 'donotban', 'PASSWORD': 'donotbansilvousplait', - 'HOST': '172.17.132.10', + 'HOST': '172.17.132.12', 'OPTIONS': { 'client_encoding': 'UTF8', # 'isolation_level': psycopg2.extensions.ISOLATION_LEVEL_DEFAULT, diff --git a/books/admin.py b/books/admin.py index 9b58e6bb..942dccb4 100644 --- a/books/admin.py +++ b/books/admin.py @@ -4,4 +4,5 @@ from .models import * admin.site.register(Book) admin.site.register(BookMark) admin.site.register(BookReview) +admin.site.register(BookTag) diff --git a/books/forms.py b/books/forms.py index 1ed3125d..93e61c48 100644 --- a/books/forms.py +++ b/books/forms.py @@ -4,7 +4,7 @@ from django.contrib.postgres.forms import SimpleArrayField from django.utils.translation import gettext_lazy as _ from .models import Book, BookMark, BookReview from common.models import MarkStatusEnum -from common.forms import RadioBooleanField, RatingValidator +from common.forms import RadioBooleanField, RatingValidator, TagField, TagInput from common.forms import PreviewImageInput @@ -77,6 +77,7 @@ class BookForm(forms.ModelForm): isbn = isbn.strip() return isbn + class BookMarkForm(forms.ModelForm): IS_PRIVATE_CHOICES = [ (True, _("仅关注者")), @@ -96,6 +97,11 @@ class BookMarkForm(forms.ModelForm): initial=True, choices=IS_PRIVATE_CHOICES ) + tags = TagField( + required=False, + widget=TagInput(attrs={'placeholder': _("回车增加标签")}), + label = _("标签") + ) class Meta: model = BookMark fields = [ diff --git a/books/models.py b/books/models.py index 1b804de6..19579c87 100644 --- a/books/models.py +++ b/books/models.py @@ -3,7 +3,7 @@ import django.contrib.postgres.fields as postgres from django.utils.translation import ugettext_lazy as _ from django.db import models from django.core.serializers.json import DjangoJSONEncoder -from common.models import Resource, Mark, Review +from common.models import Resource, Mark, Review, Tag from boofilsic.settings import BOOK_MEDIA_PATH_ROOT, DEFAULT_BOOK_IMAGE from django.utils import timezone @@ -67,8 +67,13 @@ class Book(Resource): def __str__(self): return self.title + def get_tags_manager(self): + return self.book_tags + class BookMark(Mark): + # maybe this is the better solution, for it has less complex index + # book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='book_marks', null=True, unique=True) book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='book_marks', null=True) class Meta: constraints = [ @@ -82,3 +87,12 @@ class BookReview(Review): constraints = [ models.UniqueConstraint(fields=['owner', 'book'], name="unique_book_review") ] + + +class BookTag(Tag): + book = models.ForeignKey(Book, on_delete=models.CASCADE, related_name='book_tags', null=True) + mark = models.ForeignKey(BookMark, on_delete=models.CASCADE, related_name='mark_tags', null=True) + class Meta: + constraints = [ + models.UniqueConstraint(fields=['content', 'mark'], name="unique_mark_tag") + ] \ No newline at end of file diff --git a/books/templates/books/detail.html b/books/templates/books/detail.html index 76b9fad1..f767b26e 100644 --- a/books/templates/books/detail.html +++ b/books/templates/books/detail.html @@ -102,6 +102,19 @@ +
{{ mark.text }}
{% endif %} +