def contribute_to_class(self, model, name): super(MongoUserManager, self).contribute_to_class(model, name) self.dj_model = self.model self.model = get_user_document() self.dj_model.USERNAME_FIELD = self.model.USERNAME_FIELD username = CharField(_('username'), max_length=30, unique=True) username.contribute_to_class(self.dj_model, self.dj_model.USERNAME_FIELD) self.dj_model.REQUIRED_FIELDS = self.model.REQUIRED_FIELDS for name in self.dj_model.REQUIRED_FIELDS: field = CharField(_(name), max_length=30) field.contribute_to_class(self.dj_model, name) is_staff = BooleanField(_('is_staff'), default=False) is_staff.contribute_to_class(self.dj_model, 'is_staff') is_active = BooleanField(_('is_active'), default=False) is_active.contribute_to_class(self.dj_model, 'is_active') is_superuser = BooleanField(_('is_superuser'), default=False) is_superuser.contribute_to_class(self.dj_model, 'is_superuser') last_login = DateTimeField(_('last_login'), auto_now_add=True) last_login.contribute_to_class(self.dj_model, 'last_login') date_joined = DateTimeField(_('date_joined'), auto_now_add=True) date_joined.contribute_to_class(self.dj_model, 'date_joined')
def contribute_to_class(self, cls, name): self.name = name self.fk_field_name = name + '_fk' self.ft_field_name = name + '_ft' setattr(cls, name, self) fk_field = ForeignKey(self.foreign_model, blank=True, null=True) fk_field.contribute_to_class(cls, self.fk_field_name) ft_field = CharField(max_length=255, blank=True) ft_field.contribute_to_class(cls, self.ft_field_name)
def contribute_to_class(self, cls, name): self.name = name self.fk_field_name = name + '_fk' self.ft_field_name = name + '_ft' setattr(cls, name, self) fk_kwargs = dict(blank=True, null=True) if self.related_name: fk_kwargs['related_name'] = self.related_name fk_field = ForeignKey(self.foreign_model, **fk_kwargs) fk_field.contribute_to_class(cls, self.fk_field_name) ft_field = CharField(max_length=255, blank=True, null=True, default='') ft_field.contribute_to_class(cls, self.ft_field_name)
def contribute_to_class(self, model, name): super(MongoUserManager, self).contribute_to_class(model, name) self.dj_model = self.model self.model = get_user_document() self.dj_model.USERNAME_FIELD = self.model.USERNAME_FIELD username = CharField(_('username'), max_length=30, unique=True) username.contribute_to_class(self.dj_model, self.dj_model.USERNAME_FIELD) self.dj_model.REQUIRED_FIELDS = self.model.REQUIRED_FIELDS for name in self.dj_model.REQUIRED_FIELDS: field = CharField(_(name), max_length=30) field.contribute_to_class(self.dj_model, name)
def augment_with_itemprops_microdata(sender: object, **kwargs): if issubclass(sender, models.SchemaMicrodata): for field_name in sender.itemprop_fields(): field = None assert isinstance(sender, object) for fld in sender._meta.fields: if fld.get_attname() == field_name: field = fld type = field.__class__.__name__ if field else "None" enum = getattr(models, f"{type}ItemProp", None) if enum: display_name = field.verbose_name or field.name itemprop_field_name = f"{field.name}_itemprop" itemprop_field = CharField( f"{display_name} microdata item property", name=itemprop_field_name, max_length=200, unique=False, blank=True, null=False, default="", editable=True, choices=enum.choices(), db_tablespace=field.db_tablespace) itemprop_field.auto_created = True itemprop_field.contribute_to_class(sender, itemprop_field_name) def itemprop_attr(sender_instance): prop_key = getattr(sender_instance, itemprop_field_name, None) prop_val = field.choices attr = loader.render_to_string( "utils/itemprop.attr.html", { "itemprop": getattr(sender_instance, itemprop_field_name, None) }) return mark_safe(attr) setattr(sender, f"{itemprop_field_name}_attribute", property(itemprop_attr))