class ProductTranslation(TranslatedFieldsModel): master = models.ForeignKey( Product, on_delete=models.CASCADE, related_name='translations', null=True, ) caption = HTMLField( verbose_name=_("Caption"), blank=True, null=True, configuration='CKEDITOR_SETTINGS_CAPTION', help_text=_( "Short description used in the catalog's list view of products."), ), description = HTMLField( verbose_name=_("Description"), configuration='CKEDITOR_SETTINGS_DESCRIPTION', blank=True, help_text=_( "Full description used in the catalog's detail view of Smart Cards." ), ), class Meta: unique_together = [('language_code', 'master')]
class PersonBiographyPluginModel(CMSPlugin): """ Stores a reference to a PersonBiography. This is used so a given PersonBiography can be referenced by 0 or more PersonBiographyPlugins. """ person = models.ForeignKey(PersonBiography) short_description = HTMLField( blank=True, help_text= "If specified, this text will replace the person's normal description." ) event_description = HTMLField( blank=True, help_text= "If specified, this text will appear after the person's normal description." ) class Meta: ordering = ('person', ) def __unicode__(self): return unicode(self.person) def copy_relations(self, oldinstance): self.person = oldinstance.person
class City(models.Model): country = models.ForeignKey(Country) delivery_method = models.ManyToManyField(DeliveryMethod) name = models.CharField(_('name of city'), max_length=128) points_title = models.CharField(_('points title'), max_length=1128, blank=True, null=True) points = HTMLField(_('points'), blank=True) courier_title = models.CharField(_('courier title'), max_length=1128, blank=True, null=True) courier = HTMLField(_('courier'), blank=True) postal_title = models.CharField(_('postal title'), max_length=1128, blank=True, null=True) postal = HTMLField(_('postal'), blank=True) def __unicode__(self): return u'%s' % self.name class Meta: ordering = ['country', 'name'] verbose_name = _('city') verbose_name_plural = _('cities')
class DCLBannerItemPluginModel(CMSPlugin): content = HTMLField() banner_text = HTMLField( blank=True, null=True, max_length=100, help_text='Optional text to be shown as banner in other half.', ) banner_image = FilerImageField( on_delete=models.CASCADE, null=True, blank=True, help_text='Optional image to be used in the banner in other half.') TEXT_DIRECTIONS = (('left', 'Left'), ('right', 'Right')) text_direction = models.CharField( choices=TEXT_DIRECTIONS, max_length=10, default=True, help_text='The alignment of text in the section') def get_extra_classes(self): extra_classes = '' if self.text_direction == 'left': extra_classes = 'flex-row-rev' return extra_classes
class StockModelPlugin(CMSPlugin): text_left = HTMLField(max_length=255, default='', verbose_name='Текст слева') text_right = HTMLField(max_length=255, default='', verbose_name='Текст справа') url = models.CharField(max_length=255, null=True, verbose_name='Ссылка') color = ColorField(default='#FF0000', verbose_name='Цвет фона справа') image = models.ImageField(upload_to=get_file_path, null=True, blank=True, verbose_name=_('Картинка')) added = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name='Добавлена') def rgba(self): hex_value = self.color.lstrip('#') lv = len(hex_value) rgba_value = tuple( int(hex_value[i:i + lv // 3], 16) for i in range(0, lv, lv // 3)) return rgba_value def image_src(self): try: return self.image.url except ValueError: return None
class Event(models.Model): name = models.CharField( help_text=_("For reference, such as \"Spring 2, 2010\""), max_length=255 ) event_date = models.DateField(default=date.today) pel_due_date = models.DateField(default=date.today) bgs_due_date = models.DateField(default=date.today) oog_p = models.BooleanField(_("Out of game event"), default=False) bgs_p = models.BooleanField(_("Allow Between Game Skills"), default=True) notes = HTMLField(blank=True, default='') summary = HTMLField(blank=True, default='') def __str__(self): return "{} - {}".format( self.name, self.event_date.strftime("%m-%d-%Y") ) @classmethod def previous_event(cls): try: return cls.objects.filter(event_date__lt=date.today())\ .order_by('-event_date').first() except cls.DoesNotExist: return None @classmethod def next_event(cls): try: return cls.objects.filter(event_date__gt=date.today())\ .order_by('event_date').first() except cls.DoesNotExist: return None @property def previous(self): try: return type(self).objects.filter(event_date__lt=self.event_date)\ .order_by('-event_date').first() except self.DoesNotExist: return None @property def next(self): try: return type(self).objects.filter(event_date__gt=self.event_date)\ .order_by('-event_date').first() except self.DoesNotExist: return None def get_absolute_url(self): """ Return the absolute URL. This is the canonical URL to show the detail page for an Event. """ return reverse('events:event_detail', kwargs={'pk': self.pk})
class Residence(models.Model): city = models.ForeignKey(City, on_delete=models.CASCADE) residence_name = models.CharField(max_length=100) description = HTMLField(blank=False) note = HTMLField(blank=True) def __str__(self): return "%s, %s" % (self.residence_name, self.city)
class Faculty(TranslatableModel): #region -----Translation----- translations = TranslatedFields( description=HTMLField(blank=True, default="", verbose_name=_("Description")), title=CharField(max_length=100, blank=False, default="", unique=True, verbose_name=_("Title")), council_of_employers=HTMLField(blank=False, verbose_name=_("Council of employers"))) #endregion #region -----Information----- emblem = ImageField(upload_to="faculties/emblems", blank=False, verbose_name=_("Emblem"), default="") #endregion #region -----Relation----- scientific_society = ForeignKey(ScientificSociety, blank=True, null=True, on_delete=SET_NULL, verbose_name=_("Scientific Societies"), related_name="scientific_society") gallery = ForeignKey(Gallery, blank=True, null=True, on_delete=SET_NULL, verbose_name=_("Gallery"), related_name="faculties") staff = ManyToManyField("StaffFaculty", verbose_name=_("Staff")) #endregion #region -----Metadata----- class Meta(object): verbose_name_plural = _("Faculties") verbose_name = _("Faculty") #endregion #region -----Internal Methods----- def get_absolute_url(self) -> str: """@return link to model""" return reverse('faculty', kwargs={'faculty_id': self.pk}) def searching_fields(self) -> List[str]: """@return translated fields""" return ["translations__title", "translations__description"] def __str__(self) -> str: """@return title of faculty""" return self.title
class ContentColumn(CMSPlugin): main_content = HTMLField(blank=True) aligned_content = HTMLField(blank=True) extra_classes = models.CharField( blank=True, max_length=200, ) def __str__(self): return "Column"
class SofaModel(Product): sofa_type = models.CharField( _("Sofa Type"), choices=[(t, t) for t in (_('Straight'), _('Corner'), _('2 seat'), _('3 seat'), _('Sofabed'), _('Chair'))], max_length=9, ) multilingual = TranslatedFields( description=HTMLField( verbose_name=_("Description"), configuration='CKEDITOR_SETTINGS_DESCRIPTION', blank=True, help_text= _("Full description used in the catalog's detail view of Smart Cards." ), ), caption=HTMLField( verbose_name=_("Caption"), configuration='CKEDITOR_SETTINGS_DESCRIPTION', blank=True, help_text= _("Full description used in the catalog's detail view of Smart Cards." ), ), ) # other fields to map the specification sheet default_manager = ProductManager() lookup_fields = ('product_name__icontains', ) def get_price(self, request): aggregate = self.variants.aggregate(models.Min('unit_price')) return Money(aggregate['unit_price__min']) def is_in_cart(self, cart, watched=False, **kwargs): try: product_code = kwargs['product_code'] except KeyError: return cart_item_qs = CartItem.objects.filter(cart=cart, product=self) for cart_item in cart_item_qs: if cart_item.product_code == product_code: return cart_item def get_product_variant(self, **kwargs): try: product_code = kwargs.get('product_code') #added new model for the whole product list id_var = ProductList.objects.get(product_code=product_code).id return self.variants.get(product_code=id_var) except SofaVariant.DoesNotExist as e: raise SofaModel.DoesNotExist(e)
class SmartCardTranslation(TranslatedFieldsModel): master = models.ForeignKey(SmartCard, related_name='translations', null=True) caption = HTMLField(verbose_name=_("Caption"), configuration='CKEDITOR_SETTINGS_CAPTION', help_text=_("Short description used in the catalog's list view of products.")) description = HTMLField(verbose_name=_("Description"), configuration='CKEDITOR_SETTINGS_DESCRIPTION', help_text=_("Description for the list view of products.")) class Meta: unique_together = [('language_code', 'master')]
class Carousel(models.Model): name = models.CharField(max_length=100, help_text='A friendly name for your setup') storyOne = models.ForeignKey( Story, related_name="storyone_set", help_text='Second Slide will come from this story') captionOne = models.CharField(max_length=100, help_text='For headline override') storyTwo = models.ForeignKey( Story, related_name="storytwo_set", help_text='Third Slide will come from this story') captionTwo = models.CharField(max_length=100, help_text='For headline override') storyThree = models.ForeignKey( Story, related_name="storythree_set", help_text='First Slide will come from this story') captionThree = models.CharField(max_length=100, help_text='For headline override') storyFour = models.ForeignKey( Story, null=True, blank=True, related_name="storyfour_set", help_text='(Optional) - Fourth Slide will come from this story') captionFour = models.CharField(max_length=100, null=True, blank=True, help_text='For headline override') publish_date = models.DateTimeField( help_text="This is the publication date of your Carousel.") is_live = models.BooleanField() preview = models.BooleanField() published_objects = models.Manager() #PublishedObjectsManager() css = HTMLField(null=True, blank=True, help_text='If left blank, it will be provided for you.') js = HTMLField(null=True, blank=True, help_text='If left blank, it will be provided for you.') class Meta: ordering = ['-publish_date'] verbose_name_plural = "Carousels" @property def unified_date(self): return self.publish_date def __str__(self): return "%s" % (self.name)
class About(BaseModel): name = models.CharField(max_length=255) designation = models.CharField(max_length=255, null=True, blank=True) image = models.ImageField(blank=True) education = HTMLField(null=True, blank=True) biography = HTMLField(null=True, blank=True) linkedIn = models.URLField(null=True, blank=True) email = models.CharField(null=True, blank=True, max_length=255) def __str__(self): return self.name class Meta: verbose_name_plural = "Abouts"
class MetaAttributes(PageExtension, IconMixin): image = FilerImageField(blank=True, null=True) lead = HTMLField( max_length=256, blank=True, null=True, help_text='Short description of the page. Used by the step list plugin.' ) description = HTMLField(blank=True, null=True) class Meta: verbose_name = 'Meta Attributes' verbose_name_plural = 'Meta Attributes'
class Torneo(models.Model): class Meta: app_label = 'torneos' t_id = models.AutoField(primary_key=True) title = models.CharField(blank=False, max_length=50) slug = models.SlugField(max_length=50) short_description = models.CharField(blank=False, max_length=200) image = models.ImageField(blank=False) long_description = HTMLField(blank=False) end_date = models.DateTimeField('end date', blank=False) prizes = HTMLField(blank=True) first_prize = models.CharField(blank=True, max_length=50) evaluation = HTMLField(blank=False) data = HTMLField(blank=False) recruiting = models.BooleanField() upload_storage = FileSystemStorage(location=s.BASE_DIR, base_url='/uploads') public_leaderboard_file = models.FileField(upload_to=s.BASE_DIR + '/torneos/leaderboard/public', storage=upload_storage) private_leaderboard_file = models.FileField(upload_to=s.BASE_DIR + '/torneos/leaderboard/private', storage=upload_storage) # Custom object manager objects = TorneoManager() questions = models.ManyToManyField("torneos.RegistrationQuestion", blank=True) @models.permalink def get_absolute_url(self): return ('torneos_detail_slug', (), { 'torneo_id': self.t_id, 'slug': self.slug }) def __str__(self): return u''.join((self.title, '')).encode('utf-8').strip() def is_user_registered(self, user): """Return true if the given user has an **active** registration for this competition, else return false""" if user.is_anonymous(): return False return self.registration_set.filter(user=user.pk, active=True).exists()
class Lampe(models.Model): nom = models.CharField(max_length=30) hauteur = models.PositiveIntegerField(blank=True, null=True) largeur_socle = models.PositiveIntegerField(blank=True, null=True) diametre = models.PositiveIntegerField(blank=True, null=True) materiaux = models.CharField(blank=True, null=True, max_length=100) ampoule = models.CharField(blank=True, null=True, max_length=100) cable = models.CharField(blank=True, null=True, max_length=100) electrification = models.CharField(blank=True, null=True, max_length=100) description = HTMLField(blank=True, null=True) groupe = models.ManyToManyField(Groupe, related_name='lampes') localisation = models.ForeignKey(Localisation, related_name='localisation', blank=True, null=True) slug = models.SlugField( u'slug', blank=False, default='', help_text=u'mettre un slug unique pour cette lampe', max_length=64, ) def __str__(self): return self.nom def get_absolute_url(self): return reverse('galerieapp:LampeDetailView', kwargs={ 'slug': self.slug, })
class ScientificSociety(TranslatableModel): #region -----Translation----- translations = TranslatedFields( description=HTMLField(verbose_name=_("Description"), blank=False, default=""), sub_title=CharField(verbose_name=_("Sub title"), max_length=400, blank=False, default="")) #endregion #region -----Information----- phone = CharField(max_length=20, blank=False, verbose_name=_("Phone number")) emails = MultiEmailField() #endregion #region -----Relations----- staff = ManyToManyField("StaffCathedra", verbose_name=_("Staff")) #endregion #region -----Metadata----- class Meta(object): verbose_name_plural = _("Scientific Societies") verbose_name = _("Scientific Society") #endregion def __str__(self) -> str: return self.sub_title
class PresidencyURL(BaseModel, TranslatableModel): translations = TranslatedFields( name=models.CharField( _('name'), max_length=100, null=True, ), description=HTMLField(_('description'), ), ) url = models.URLField( _('url'), max_length=200, ) order = models.PositiveIntegerField( _('order'), default=0, ) objects = PresidencyURLQueryset.as_manager() def __str__(self): return '{} ({})'.format( self.name, self.url, ) class Meta: ordering = ('order', ) verbose_name = _('presidency url') verbose_name_plural = _('presidency urls') permissions = (('view_presidency_url', _('Can view presidency urls')), )
class Folder(CMSPlugin): layout = models.CharField( blank=True, default='', max_length=60, verbose_name=_('layout'), ) title = models.CharField(max_length=255, verbose_name=_('title'), default='', blank=True) summary = HTMLField(verbose_name=_('summary'), default='', blank=True) folder = FilerFolderField( verbose_name=_('select folder'), blank=True, null=True, on_delete=models.SET_NULL, related_name='+', ) order_by = models.CharField( max_length=60, verbose_name=_('order by'), null=True, blank=True, ) open_in_new_window = models.BooleanField( default=False, verbose_name=_('Open in new window')) def __str__(self): return self.title
class Counter(CMSPlugin): body = models.CharField(_('Title'), max_length=255, null=True, blank=True) counter = models.CharField(_('counter'), max_length=255) image = FilerImageField( verbose_name=_('Image'), blank=True, null=True, on_delete=models.SET_NULL, related_name='+', ) icon = Icon(verbose_name=_('Icon'), null=True, blank=True) prefix = models.CharField(_('prefix'), max_length=255, null=True, blank=True) suffix = models.CharField(_('suffix'), max_length=255, null=True, blank=True) content = HTMLField(verbose_name=_('Content'), default='', blank=True) layout = models.CharField(blank=True, default='', max_length=60, verbose_name=_('layout')) def __str__(self): return str(self.pk)
class Post(models.Model): class Meta: ordering = ["-added"] verbose_name = 'Новость' verbose_name_plural = 'Публикации' title = models.CharField(max_length=255, verbose_name='Название новости') category = models.CharField(max_length=10, choices=Categories.as_choices(), default='normal', verbose_name='Категория') content = HTMLField(null=True, blank=True, verbose_name='Содержание') added = models.DateTimeField(auto_now=False, auto_now_add=True, verbose_name='Добавлена') updated = models.DateTimeField(auto_now=True, auto_now_add=False, verbose_name='Изменена') image = models.ImageField(null=True, blank=True, verbose_name='Картинка') status = models.BooleanField(default=True, verbose_name='Активен') objects = PostManager() def __str__(self): return self.title def get_absolute_url(self): return "/news/{id}".format(id=self.id)
class SmartCard(Product): # common product fields unit_price = MoneyField(_("Unit price"), decimal_places=3, help_text=_("Net price for this product")) # product properties CARD_TYPE = (2 * ('{}{}'.format(s, t),) for t in ('SD', 'SDXC', 'SDHC', 'SDHC II') for s in ('', 'micro ')) card_type = models.CharField(_("Card Type"), choices=CARD_TYPE, max_length=15) SPEED = ((str(s), "{} MB/s".format(s)) for s in (4, 20, 30, 40, 48, 80, 95, 280)) speed = models.CharField(_("Transfer Speed"), choices=SPEED, max_length=8) product_code = models.CharField(_("Product code"), max_length=255, unique=True) storage = models.PositiveIntegerField(_("Storage Capacity"), help_text=_("Storage capacity in GB")) multilingual = TranslatedFields(description=HTMLField(verbose_name=_("Description"), configuration='CKEDITOR_SETTINGS_DESCRIPTION', help_text=_("Full description used in the catalog's detail view of Smart Cards."))) class Meta: verbose_name = _("Smart Card") verbose_name_plural = _("Smart Cards") def get_price(self, request): return self.unit_price def get_product_variant(self, extra): """ SmartCards do not have flavors, they are the product. """ return self
class Gallery(TranslatableModel): #region -----Translation----- translations = TranslatedFields(description=HTMLField( verbose_name=_("Description"), blank=True, null=True), title=CharField(verbose_name=_("Title"), max_length=100, blank=False)) #endregion #region -----Metadata----- class Meta(object): verbose_name_plural = _("Galleries") verbose_name = _("Gallery") #endregion #region -----Internal Methods----- def searching_fields(self) -> List[str]: """@return translated fields""" return ["translations__description", "translations__title"] def _images(self) -> Html: """@return related images""" return render_related_images(images=self.images.all()) def __str__(self) -> str: """@return gallery title""" return self.title #endregion #region -----Rename Methods----- _images.short_description = _("Images")
class MaterialBaseNode(TranslatableModel): #region -----Information----- translations = TranslatedFields( local_title=CharField(verbose_name=_("Local title"), help_text=_("""Additional field with local name for best admin usage experience. Will be filled from title field, if field empty."""), max_length=100, blank=True, null=True), content=HTMLField(verbose_name=_("Content"), blank=False, default=""), title=CharField(verbose_name=_("Title"), max_length=100)) #endregion #region -----Metadata----- class Meta(object): verbose_name_plural = _("Material-technical bases") verbose_name = _("Material-technical base") #endregion #region -----Internal Methods----- def searching_fields(self) -> List[str]: """@return translated fields""" return ["translations__title"] def __str__(self) -> str: """@return local title of node""" return f"{self.local_title}"
class UngleichCustomerItem(CMSPlugin): image = FilerImageField(null=True, blank=True, related_name="customer_item_image", on_delete=models.SET_NULL) url = models.URLField(max_length=300, default="", blank=True) description = HTMLField()
class Team(models.Model): profile = models.OneToOneField(UserProfile, on_delete=models.CASCADE,null=True) rank = models.IntegerField(default=1) description = HTMLField(null=True,blank=True) def __str__(self): return f'{self.profile.first_name} {self.profile.last_name}'
class Service(CMSPlugin): menu_text = models.CharField(max_length=100, default="", blank=True) title = models.CharField(max_length=200) sub_title = HTMLField() def __str__(self): return self.title
class Image(models.Model): banniere_name = models.ForeignKey(Banniere, on_delete=models.CASCADE) photo = models.ImageField(upload_to='accueil') description = HTMLField(blank=True) def __str__(self): return "%s %s" % (self.photo, self.banniere_name)
class FAQ(models.Model): category = models.ForeignKey(FAQCategory, null=True, verbose_name=_('Category')) question = models.CharField(_('Question'), max_length=200) answer = HTMLField(_('Answer'), help_text=_('Answer the question.')) # This defines the order number on the FAQ page orderNum = models.PositiveIntegerField( _('Order number'), help_text= _('This number specifies the order in which the questions will be shown on the FAQ page.' ), default=0) draft = models.BooleanField( _('Draft status'), default=False, help_text=_('Check this box to prevent publication.')) creationDate = models.DateTimeField(_('Creation date'), auto_now_add=True) modifiedDate = models.DateTimeField(_('Last modified date'), auto_now=True) def __str__(self): return '%s: %s' % (_('FAQ'), self.question) class Meta: verbose_name = _('FAQ') verbose_name_plural = _('FAQs') ordering = ('orderNum', )
class LUT_DeliveryPoint(MPTTModel, TranslatableModel): parent = TreeForeignKey('self', null=True, blank=True, related_name='children') translations = TranslatedFields( short_name=models.CharField(_("Short name"), max_length=50, default=EMPTY_STRING), description=HTMLField(_("Description"), configuration='CKEDITOR_SETTINGS_MODEL2', blank=True, default=EMPTY_STRING), ) is_active = models.BooleanField(_("Active"), default=True) customer_responsible = models.ForeignKey( 'Customer', verbose_name=_("Customer responsible"), help_text=_("Invoices are sent to this customer who is responsible for collecting the payments."), blank=True, null=True, default=None) inform_customer_responsible = models.BooleanField(_("Inform the group of orders placed by its members"), default=False) transport = ModelMoneyField( _("Delivery point shipping cost"), # help_text=_("This amount is added once for groups with entitled customer or at each customer for open groups."), default=DECIMAL_ZERO, blank=True, max_digits=5, decimal_places=2, validators=[MinValueValidator(0)]) min_transport = ModelMoneyField( _("Minium order amount for free shipping cost"), # help_text=_("This is the minimum order amount to avoid shipping cost."), default=DECIMAL_ZERO, blank=True, max_digits=5, decimal_places=2, validators=[MinValueValidator(0)]) objects = LUT_DeliveryPointManager() def __str__(self): if self.customer_responsible is not None: return "[{}]".format(self.customer_responsible.short_basket_name) else: return self.safe_translation_getter('short_name', any_language=True, default=EMPTY_STRING) class Meta: verbose_name = _("Delivery point") verbose_name_plural = _("Deliveries points")