diff --git a/apps/account/transfer_data.py b/apps/account/transfer_data.py index 91f9051f..c39e0ac1 100644 --- a/apps/account/transfer_data.py +++ b/apps/account/transfer_data.py @@ -8,8 +8,12 @@ def transfer_user(): # queryset = Profiles.objects.all() # queryset = queryset.annotate(nickname=F("account__nickname")) # queryset = queryset.annotate(email=F("account__email")) - - queryset = Accounts.objects.filter(confirmed_at__isnull=False) + stop_list = ['cyril@tomatic.net', + 'cyril2@tomatic.net', + 'd.sadykova@id-east.ru', + 'd.sadykova@octopod.ru', + 'n.yurchenko@id-east.ru'] + queryset = Accounts.objects.filter(confirmed_at__isnull=False).exclude(email__in=stop_list) serialized_data = UserSerializer(data=list(queryset.values()), many=True) diff --git a/apps/establishment/admin.py b/apps/establishment/admin.py index 4b845c60..0397c407 100644 --- a/apps/establishment/admin.py +++ b/apps/establishment/admin.py @@ -4,18 +4,19 @@ from django.contrib.contenttypes.admin import GenericTabularInline from django.utils.translation import gettext_lazy as _ from comment.models import Comment +from utils.admin import BaseModelAdminMixin from establishment import models from main.models import Award from review import models as review_models @admin.register(models.EstablishmentType) -class EstablishmentTypeAdmin(admin.ModelAdmin): +class EstablishmentTypeAdmin(BaseModelAdminMixin): """EstablishmentType admin.""" @admin.register(models.EstablishmentSubType) -class EstablishmentSubTypeAdmin(admin.ModelAdmin): +class EstablishmentSubTypeAdmin(BaseModelAdminMixin): """EstablishmentSubType admin.""" @@ -47,17 +48,18 @@ class CommentInline(GenericTabularInline): @admin.register(models.Establishment) -class EstablishmentAdmin(admin.ModelAdmin): +class EstablishmentAdmin(BaseModelAdminMixin): """Establishment admin.""" list_display = ['id', '__str__', 'image_tag', ] inlines = [ AwardInline, ContactPhoneInline, ContactEmailInline, ReviewInline, CommentInline] raw_id_fields = ('address',) + fields = ['old_id', 'name'] @admin.register(models.Position) -class PositionAdmin(admin.ModelAdmin): +class PositionAdmin(BaseModelAdminMixin): """Position admin.""" @@ -68,7 +70,7 @@ class PlateInline(admin.TabularInline): @admin.register(models.Menu) -class MenuAdmin(admin.ModelAdmin): +class MenuAdmin(BaseModelAdminMixin): """Menu admin.""" list_display = ['id', 'category_translated'] inlines = [ diff --git a/apps/news/admin.py b/apps/news/admin.py index fa2aca8b..90527ea4 100644 --- a/apps/news/admin.py +++ b/apps/news/admin.py @@ -3,6 +3,7 @@ from django.conf import settings from news import models from .tasks import send_email_with_news +from utils.admin import BaseModelAdminMixin @admin.register(models.NewsType) @@ -24,7 +25,7 @@ send_email_action.short_description = "Send the selected news by email" @admin.register(models.News) -class NewsAdmin(admin.ModelAdmin): +class NewsAdmin(BaseModelAdminMixin): """News admin.""" raw_id_fields = ('address',) actions = [send_email_action] diff --git a/apps/review/admin.py b/apps/review/admin.py index 5820f557..03c2419a 100644 --- a/apps/review/admin.py +++ b/apps/review/admin.py @@ -1,8 +1,9 @@ """Admin page for app Review""" from . import models from django.contrib import admin +from utils.admin import BaseModelAdminMixin @admin.register(models.Review) -class ReviewAdminModel(admin.ModelAdmin): +class ReviewAdminModel(BaseModelAdminMixin): """Admin model for model Review.""" diff --git a/apps/utils/admin.py b/apps/utils/admin.py new file mode 100644 index 00000000..43680e20 --- /dev/null +++ b/apps/utils/admin.py @@ -0,0 +1,36 @@ +"""Mixins for admin models.""" +from django.contrib import admin +from django.db.models import ForeignKey + + +class BaseModelAdminMixin(admin.ModelAdmin): + """ + Class that overridden ModelAdmin and adds to readonly_fields attr + persisted fields like created_by, modified_by. + """ + + _PERSISTENT_READ_ONLY_FIELDS = ['created_by', 'modified_by'] + + def _get_fk_field_names(self, fields: iter): + """ + Return an iterable object which contains FK model fields. + :param fields: iterable + :return: iterable + """ + foreign_key_fields = [] + for field in fields: + if isinstance(field, ForeignKey): + foreign_key_fields.append(field.name) + return foreign_key_fields + + def get_readonly_fields(self, request, obj=None): + """ + Hook for specifying custom readonly fields. + """ + _readonly_fields = list(self.readonly_fields) + fk_field_names = self._get_fk_field_names(self.model._meta.fields) + + for field_name in fk_field_names: + if field_name in self._PERSISTENT_READ_ONLY_FIELDS: + _readonly_fields.append(field_name) + return tuple(_readonly_fields) diff --git a/apps/utils/models.py b/apps/utils/models.py index fb1de17c..ae6e15b0 100644 --- a/apps/utils/models.py +++ b/apps/utils/models.py @@ -331,3 +331,6 @@ class GMTokenGenerator(PasswordResetTokenGenerator): used. """ return self.get_fields(user, timestamp) + + +timezone.datetime.now().date().isoformat() \ No newline at end of file