Example #1
0
class MinSizeModel(models.Model):
    image = StdImageField(upload_to=upload_to,
                          validators=[MinSizeValidator(200, 200)])
Example #2
0
class AdminDeleteModel(models.Model):
    """can be deleted through admin"""
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          blank=True)
Example #3
0
class ThumbnailModel(models.Model):
    """creates a thumbnail resized to maximum size to fit a 100x75 area"""
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          blank=True,
                          variations={'thumbnail': (100, 75)})
Example #4
0
class MyProfile(UserenaBaseProfile):
    user = models.OneToOneField(User,
                                unique=True,
                                verbose_name=_('user'),
                                related_name='my_profile')
    user_state_CHOICES = ((u'普通用户', u'普通用户'), (u'高级用户', u'高级用户'), (u'快递人',
                                                                   u'快递人'))
    user_state = models.CharField(u'用户状态',
                                  max_length=20,
                                  choices=user_state_CHOICES,
                                  default=u'普通用户')
    GENDER_CHOICES = (
        (1, _('Male')),
        (2, _('Female')),
    )
    gender = models.PositiveSmallIntegerField(_('gender'),
                                              choices=GENDER_CHOICES,
                                              blank=True,
                                              null=True)
    date_joined = models.DateTimeField(u'注册时间', auto_now_add=True)
    real_name = models.CharField(u'真实姓名', max_length=100)
    phone = models.CharField(max_length=11,
                             blank=True,
                             validators=[
                                 RegexValidator(regex='^\d{11}$',
                                                message='请输入正确的手机号',
                                                code='Invalid number')
                             ])
    one_card = StdImageField(
        u'一卡通',
        upload_to='onecard',
        variations={'thumbnail': (100, 75)},
        blank=True
    )  # creates a thumbnail resized to maximum size to fit a 100x75 area

    #major=models.CharField(u'专业',max_length=100,blank=True)
    #address=models.ForeignKey(ReceiveAddress,verbose_name=u'收货地址',related_name='my_profile',help_text=u"目前只支持华电二校范围")
    #address=models.CharField(u'住址',max_length=100,blank=True)
    #phone=models.PositiveSmallIntegerField()
    #identity_card=models.CharField(u'身份证',max_length=100,blank=True)
    # student_number=models.CharField(u'学号',max_length=100,blank=True)
    #one_card=models.FileField(u'一卡通',null=True,blank=True,upload_to='onecard')

    def image_img(self):
        if self.one_card:
            return str('<img src="%s" />' % self.one_card.thumbnail.url)
        else:
            return u'上传一卡通'

    image_img.short_description = '一卡通'
    image_img.allow_tags = True

    def image_img2(self):
        if self.mugshot:
            return str('<img src="%s" />' % self.mugshot.url)
        else:
            return u'上传头像'

    image_img2.short_description = '头像'
    image_img2.allow_tags = True

    class Meta:
        verbose_name_plural = u'个人资料'
        #app_label=u'助学贷款'
        ordering = ["-date_joined"]
Example #5
0
class UtilVariationsModel(models.Model):
    """delays creation of 150x150 thumbnails until it is called manually"""
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          variations={'thumbnail': (150, 150, True)},
                          render_variations=render_job)
Example #6
0
class AutoSlugClassNameDirModel(models.Model):
    name = models.CharField(max_length=50)
    image = StdImageField(upload_to=UploadToAutoSlugClassNameDir(
        populate_from='name'))
Example #7
0
class Profil(AbstractUser):

    site_web = models.URLField(null=True, blank=True)
    description = models.TextField(null=True, blank=True)
    competences = models.TextField(null=True, blank=True)
    adresse = models.OneToOneField(Adresse, on_delete=models.CASCADE)
    avatar = StdImageField(null=True,
                           blank=True,
                           upload_to='avatars/',
                           variations={
                               'large': (640, 480),
                               'thumbnail2': (100, 100, True)
                           })

    date_registration = models.DateTimeField(verbose_name="Date de création",
                                             editable=False)
    pseudo_june = models.CharField(_('(optionnel) pseudo Monnaie Libre'),
                                   blank=True,
                                   default=None,
                                   null=True,
                                   max_length=50)

    inscrit_newsletter = models.BooleanField(
        verbose_name="J'accepte de recevoir des emails de Permacat",
        default=False)
    statut_adhesion = models.IntegerField(choices=Choix.statut_adhesion,
                                          default="0")
    statut_adhesion_rtg = models.IntegerField(
        choices=Choix.statut_adhesion_rtg, default="0")
    cotisation_a_jour = models.BooleanField(verbose_name="Cotisation à jour",
                                            default=False)
    accepter_conditions = models.BooleanField(
        verbose_name=
        "J'ai lu et j'accepte les conditions d'utilisation du site",
        default=False,
        null=False)
    accepter_annuaire = models.BooleanField(
        verbose_name=
        "J'accepte d'apparaitre dans l'annuaire du site et la carte et rend mon profil visible par tous",
        default=True)

    #device_registration_id =  models.CharField(_('device reg id'), blank=True, default=None, null=True, max_length=100)

    def __str__(self):
        return self.username

    def __unicode__(self):
        return self.username

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.date_registration = now()
        if not hasattr(self, 'adresse') or not self.adresse:
            self.adresse = Adresse.objects.create()

        return super(Profil, self).save(*args, **kwargs)

    def get_nom_class(self):
        return "Profil"

    def get_absolute_url(self):
        return reverse('profil', kwargs={'user_id': self.id})

    def getDistance(self, profil):
        x1 = float(self.adresse.latitude) * DEGTORAD
        y1 = float(self.adresse.longitude) * DEGTORAD
        x2 = float(profil.adresse.latitude) * DEGTORAD
        y2 = float(profil.adresse.longitude) * DEGTORAD
        x = (y2 - y1) * math.cos((x1 + x2) / 2)
        y = (x2 - x1)
        return math.sqrt(x * x + y * y) * 6371

    @property
    def statutMembre(self):
        return self.statut_adhesion

    @property
    def statutMembre_str(self):
        if self.statut_adhesion == 0:
            return "souhaite devenir membre de l'association"
        elif self.statut_adhesion == 1:
            return "ne souhaite pas devenir membre"
        elif self.statut_adhesion == 2:
            return "membre actif"

    @property
    def statutMembre_rtg(self):
        return self.statut_adhesion_rtg

    @property
    def statutMembre_rtg_str(self):
        if self.statut_adhesion_rtg == 0:
            return "souhaite devenir membre de l'association"
        elif self.statut_adhesion_rtg == 1:
            return "ne souhaite pas devenir membre"
        elif self.statut_adhesion_rtg == 2:
            return "membre actif"

    @property
    def is_permacat(self):
        if self.statut_adhesion == 2:
            return True
        else:
            return False

    @property
    def is_rtg(self):
        if self.statut_adhesion_rtg == 2:
            return True
        else:
            return False

    @property
    def cotisation_a_jour_str(self):
        return "oui" if self.cotisation_a_jour else "non"

    @property
    def inscrit_newsletter_str(self):
        return "oui" if self.inscrit_newsletter else "non"
Example #8
0
class Address(ResizeUploadedImageModelMixin, PinYinFieldModelMixin, TenantModelMixin, models.Model):
    name = models.CharField(_('name'), max_length=30, null=False, blank=False)
    mobile = models.CharField(_('mobile number'), max_length=15, null=True, blank=True)
    address = models.CharField(_('address'), max_length=100, null=False, blank=False)
    customer = models.ForeignKey(Customer, blank=False, null=False, verbose_name=_('customer'))
    id_number = models.CharField(_('ID number'), max_length=20, blank=True, null=True)
    id_photo_front = StdImageField(_('ID Front'), upload_to=get_id_photo_front_path, blank=True, null=True,
                                   validators=[FileExtensionValidator(['jpg', 'jpeg', 'gif', 'png'])],
                                   storage=OverwriteStorage(),
                                   variations={
                                       'thumbnail': (200, 200, False)
                                   })
    id_photo_back = StdImageField(_('ID Back'), upload_to=get_id_photo_back_path, blank=True, null=True,
                                  validators=[FileExtensionValidator(['jpg', 'jpeg', 'gif', 'png'])],
                                  storage=OverwriteStorage(),
                                  variations={
                                      'thumbnail': (200, 200, False)
                                  })
    create_time = models.DateTimeField(_('Create Time'), auto_now_add=True, editable=False)

    pinyin_fields_conf = [
        ('name', Style.NORMAL, False),
        ('name', Style.FIRST_LETTER, False),
        ('address', Style.NORMAL, False),
        ('address', Style.FIRST_LETTER, False),
    ]

    class Meta:
        ordering = ['create_time']

    def __str__(self):
        return self.get_text()

    def get_text(self):
        text = self.address
        if self.mobile:
            text = '%s,%s' % (self.mobile, text)
        if self.name:
            text = '%s,%s' % (self.name, text)
        return text

    def get_customer_link(self):
        url = reverse('admin:customer_customer_change', args=[self.customer.pk])
        return '<a href="%s">%s</a>' % (url, self.customer)

    get_customer_link.allow_tags = True
    get_customer_link.short_description = 'Customer'

    def id_photo_link(self):
        return self.id_photo_front_link() + self.id_photo_back_link()

    id_photo_link.allow_tags = True
    id_photo_link.short_description = 'ID_photo'

    def id_photo_front_link(self):
        if self.id_photo_front:
            file_path = str(self.id_photo_front)
            # base, file_path = file_path.split('/%s' % settings.ID_PHOTO_FOLDER)
            # url = '/%s%s' % (settings.ID_PHOTO_FOLDER, file_path)
            url = '%s%s' % (settings.MEDIA_URL, file_path)
            return '<a target="_blank" href="%s"><img width="90px" src="%s"></a>' % (url, url)
        else:
            return ''

    id_photo_front_link.allow_tags = True
    id_photo_front_link.short_description = 'ID_photo_front'

    def id_photo_back_link(self):
        if self.id_photo_back:
            file_path = str(self.id_photo_back)
            # base, file_path = file_path.split('/%s' % settings.ID_PHOTO_FOLDER)
            # url = '/%s%s' % (settings.ID_PHOTO_FOLDER, file_path)
            url = '%s%s' % (settings.MEDIA_URL, file_path)
            return '<a target="_blank" href="%s"><img width="90px" src="%s"></a>' % (url, url)
        else:
            return ''

    id_photo_back_link.allow_tags = True
    id_photo_back_link.short_description = 'ID_photo_back'

    def get_address(self):
        return '%s,%s,%s' % (self.name, self.mobile, self.address)

    def save(self, *args, **kwargs):
        # resize images when first uploaded
        self.resize_image('id_photo_front')
        self.resize_image('id_photo_back')
        if self.id_number and 'x' in self.id_number:
            self.id_number = self.id_number.upper()

        self.link_id_photo()
        super(Address, self).save(*args, **kwargs)

    def link_id_photo(self):
        if self.id_number:
            existed = None
            if not self.id_photo_front:
                existed = Address.objects.filter(id_number=self.id_number, id_photo_front__isnull=False).first()
                if existed:
                    self.id_photo_front = existed.id_photo_front
            if not self.id_photo_back:
                if existed and existed.id_photo_back:
                    self.id_photo_back = existed.id_photo_back
                else:
                    existed = Address.objects.filter(id_number=self.id_number, id_photo_back__isnull=False).first()
                    if existed:
                        self.id_photo_back = existed.id_photo_back
Example #9
0
class ResizeModel(models.Model):
    # resizes image to maximum size to fit a 640x480 area
    image = StdImageField(upload_to='img', size=(640, 480))
Example #10
0
class Ads(models.Model):
    title = models.CharField(max_length=80)
    url = models.URLField()
    image = StdImageField(upload_to=UploadToUUID(path='ads'), blank=True)
    published = models.BooleanField(default=True)
    date = models.DateTimeField(default=timezone.now)
Example #11
0
class Address(PinYinFieldModelMixin, ResizeUploadedImageModelMixin,
              models.Model):
    first_name = models.CharField(_('姓名'), max_length=256, blank=True)
    last_name = models.CharField(max_length=256, blank=True)
    company_name = models.CharField(max_length=256, blank=True)
    street_address_1 = models.CharField(_('街道地址'), max_length=256, blank=True)
    street_address_2 = models.CharField(max_length=256, blank=True)
    city = models.CharField(pgettext_lazy("City", "City"),
                            max_length=256,
                            blank=True)
    city_area = models.CharField(pgettext_lazy("City area", "District"),
                                 max_length=128,
                                 blank=True)
    postal_code = models.CharField(max_length=20, blank=True)
    country = CountryField(pgettext_lazy("Address field", "County"),
                           blank=True)
    country_area = models.CharField(pgettext_lazy("Address field", "Province"),
                                    max_length=128,
                                    blank=True)
    phone = models.CharField(pgettext_lazy("Phone number", "Phone number"),
                             blank=True,
                             default="",
                             max_length=32)
    id_number = models.CharField(_('ID number'),
                                 max_length=20,
                                 blank=True,
                                 null=True)
    id_photo_front = StdImageField(
        _('ID Front'),
        upload_to=get_id_photo_front_path,
        blank=True,
        null=True,
        validators=[FileExtensionValidator(['jpg', 'jpeg', 'gif', 'png'])],
        storage=OverwriteStorage(),
        variations={'thumbnail': (300, 200, False)})
    id_photo_back = StdImageField(
        _('ID Back'),
        upload_to=get_id_photo_back_path,
        blank=True,
        null=True,
        validators=[FileExtensionValidator(['jpg', 'jpeg', 'gif', 'png'])],
        storage=OverwriteStorage(),
        variations={'thumbnail': (300, 200, False)})
    pinyin = models.TextField(_('pinyin'), max_length=1024, blank=True)

    pinyin_fields_conf = [
        ('first_name', Style.NORMAL, False),
        ('first_name', Style.FIRST_LETTER, False),
        ('street_address_1', Style.NORMAL, False),
        ('street_address_1', Style.FIRST_LETTER, False),
    ]

    objects = AddressQueryset.as_manager()

    class Meta:
        ordering = ("pk", )

    def __init__(self, *args, **kwargs):
        super(Address, self).__init__(*args, **kwargs)
        self._state.id_number = self.id_number

    @cached_property
    def customer(self):
        return self.user_addresses.order_by('id').first()

    @property
    def province(self):
        return self.country_area

    @property
    def district(self):
        return self.city_area

    @property
    def full_name(self):
        return self.first_name

    @property
    def name(self):
        return self.first_name

    def __str__(self):
        return f'{self.first_name}, {self.phone}, {self.street_address_1}'

    def __eq__(self, other):
        if not isinstance(other, Address):
            return False
        return self.as_data() == other.as_data()

    __hash__ = models.Model.__hash__

    def as_data(self):
        """Return the address as a dict suitable for passing as kwargs.

        Result does not contain the primary key or an associated user.
        """
        data = model_to_dict(self, exclude=["id", "user"])
        if isinstance(data["country"], Country):
            data["country"] = data["country"].code
        if isinstance(data["phone"], PhoneNumber):
            data["phone"] = data["phone"].as_e164
        return data

    def get_copy(self):
        """Return a new instance of the same address."""
        return Address.objects.create(**self.as_data())

    def save(self, *args, **kwargs):
        # resize images when first uploaded
        self.resize_image('id_photo_front')
        self.resize_image('id_photo_back')
        if self.id_number and 'x' in self.id_number:
            self.id_number = self.id_number.upper()

        self._link_id_photo()
        super(Address, self).save(*args, **kwargs)

    def _link_id_photo(self):
        """
        reuse id photo if already uploaded
        """
        if self._state.id_number != self.id_number and self.id_number:
            if not self.id_photo_front:
                existed = Address.objects.filter(
                    id_number=self.id_number,
                    id_photo_front__isnull=False).first()
                if existed:
                    self.id_photo_front = existed.id_photo_front
            if not self.id_photo_back:
                existed = Address.objects.filter(
                    id_number=self.id_number,
                    id_photo_back__isnull=False).first()
                if existed:
                    self.id_photo_back = existed.id_photo_back
Example #12
0
class Gallery(models.Model):
    facility = models.ForeignKey(Facility, on_delete=models.CASCADE)
    image = StdImageField(default='court.png', upload_to='facility', blank=True, variations={'large': (1280, 720), 'thumbnail': (640, 480, True)})
Example #13
0
class Uye(AbstractUser):
    tcno = models.CharField(max_length=11,
                            verbose_name='TC Kimlik No',
                            blank=True,
                            null=True,
                            default="")
    #eposta 			= models.EmailField(unique=True, verbose_name='E-posta Adresi', null=True, default=True)
    telefon = models.CharField(max_length=20,
                               verbose_name="Telefon Numarası",
                               null=True,
                               blank=True,
                               default="")
    cinsiyet = models.CharField(max_length=1,
                                choices=cinsiyet_secenekleri,
                                blank=True,
                                null=True,
                                default='B',
                                verbose_name='Cinsiyet')
    egitim = models.ForeignKey(Egitim,
                               blank=True,
                               null=True,
                               default=None,
                               verbose_name="Egitim Durumu",
                               on_delete=models.SET_NULL)
    askerlik = models.ForeignKey(Askerlik,
                                 blank=True,
                                 null=True,
                                 default=None,
                                 verbose_name="Askerlik Durumu",
                                 on_delete=models.SET_NULL)
    uye_tipi = models.CharField(max_length=15,
                                choices=uye_tipi_secenekleri,
                                blank=True,
                                null=True,
                                default='kullanici',
                                verbose_name='Üyelik Durumu')
    fotograf = StdImageField(upload_to='user-images',
                             blank=True,
                             variations={
                                 'thumbnail': (150, 150, True),
                                 'medium': (300, 300)
                             },
                             verbose_name='Profil Fotoğrafı')
    dogum_tarihi = models.DateField(blank=True,
                                    null=True,
                                    verbose_name='Doğum Tarihi')
    sehir = models.ForeignKey(Sehir,
                              verbose_name="Şehir",
                              blank=True,
                              null=True,
                              default=None,
                              on_delete=models.CASCADE)
    konum = models.CharField(max_length=255,
                             blank=True,
                             verbose_name='Yaşadığınız Yer')
    hakkinda = RichTextField(config_name='members',
                             blank=True,
                             verbose_name='Hakkınızda')
    website = models.URLField(max_length=200,
                              blank=True,
                              verbose_name='Website Adresi')
    facebook = models.URLField(max_length=255,
                               blank=True,
                               verbose_name='Facebook Profil Adresi')
    twitter = models.URLField(max_length=255,
                              blank=True,
                              verbose_name='Twitter Profil Adresi')
    google_plus = models.URLField(max_length=255,
                                  blank=True,
                                  verbose_name='Google+ Profil Adresi')
    youtube = models.URLField(max_length=255,
                              blank=True,
                              verbose_name='Youtube Profil Adresi')
    instagram = models.CharField(max_length=255,
                                 blank=True,
                                 verbose_name='İnstagram Kullanıcı Adı')
    goruntulenme = models.IntegerField(default=0,
                                       editable=False,
                                       verbose_name='Görüntülenme')
    dil_konusma = models.ManyToManyField(
        Dil,
        verbose_name="Konuşabildiğiniz Diller",
        blank=True,
        null=True,
        default=None,
        related_name="konusulabilen_diller")
    dil_yazma = models.ManyToManyField(
        Dil,
        verbose_name="Yazıp, Okuyabildiğiniz Diller",
        blank=True,
        null=True,
        default=None,
        related_name="yazilabilen_diller")
    c_time = models.DateTimeField(verbose_name="Eklenme Tarihi",
                                  auto_now=True,
                                  editable=False,
                                  blank=True,
                                  null=True)
    u_time = models.DateTimeField(verbose_name="Güncellenme Tarihi",
                                  auto_now_add=True,
                                  editable=False,
                                  blank=True,
                                  null=True)

    def __str__(self):
        return self.username

    def get_yas(self):
        if not self.dogum_tarihi:
            return 0
        else:
            bugunTarihi = datetime.today()
            dogumTarihi = datetime(self.dogum_tarihi.year,
                                   self.dogum_tarihi.month,
                                   self.dogum_tarihi.day)
            yas = int((bugunTarihi - dogumTarihi).days / 365)
            return yas

    def get_avatar(self):
        url = static('img/user-mask.jpg')
        if self.photo:
            url = self.photo.thumbnail.url
        else:
            if self.gender == 'E':
                url = static('img/user-man.png')
            elif self.gender == 'K':
                url = static('img/user-woman.png')
            else:
                url = static('img/user-mask.jpg')
        return url

    def full_name(self):
        return '{} {}'.format(self.first_name, self.last_name)

    def cinsiyeti(self):
        if self.gender == 'E':
            return 'Erkek'
        elif self.gender == 'K':
            return 'Kadın'
        else:
            return 'Belirtilmemiş'

    class Meta:
        db_table = 'uyeler'
        verbose_name = 'Kullanıcı'
        verbose_name_plural = 'Kullanıcılar'
Example #14
0
class Product(ResizeUploadedImageModelMixin, PinYinFieldModelMixin, TenantModelMixin, models.Model):
    code = models.CharField(_('code'), max_length=32, blank=True)
    name_en = models.CharField(_('name_en'), max_length=128, blank=True)
    name_cn = models.CharField(_('name_cn'), max_length=128, blank=True)
    brand_en = models.CharField(_('brand_en'), max_length=128, blank=True)
    brand_cn = models.CharField(_('brand_cn'), max_length=128, blank=True)
    alias = models.CharField(_('alias'), max_length=255, blank=True)
    country = models.CharField(_('country'), max_length=128, choices=COUNTRIES_CHOICES, default='AU', blank=True)
    pic = StdImageField(upload_to=get_product_pic_path, blank=True, null=True, verbose_name=_('picture'),
                        validators=[FileExtensionValidator(['jpg', 'jpeg', 'gif', 'png'])],
                        storage=OverwriteStorage(),
                        variations={
                            'medium': (800, 800, True),
                            'thumbnail': (400, 400, True)
                        })
    brand = models.ForeignKey(Brand, blank=True, null=True, verbose_name=_('brand'))
    spec = models.CharField(_('spec'), max_length=128, blank=True)
    # deliver weight unit: KG
    weight = models.DecimalField(_('weight'), max_digits=8, decimal_places=2, blank=True, null=True)
    sold_count = models.IntegerField(_('Sold Count'), default=0, null=False, blank=False)

    last_sell_price = models.DecimalField(_('last sell price'), max_digits=8, decimal_places=2, blank=True, null=True)
    avg_sell_price = models.DecimalField(_('avg sell price'), max_digits=8, decimal_places=2, blank=True, null=True)
    min_sell_price = models.DecimalField(_('min sell price'), max_digits=8, decimal_places=2, blank=True, null=True)
    max_sell_price = models.DecimalField(_('max sell price'), max_digits=8, decimal_places=2, blank=True, null=True)
    avg_cost = models.DecimalField(_('avg cost'), max_digits=8, decimal_places=2, blank=True, null=True)
    min_cost = models.DecimalField(_('min cost'), max_digits=8, decimal_places=2, blank=True, null=True)
    max_cost = models.DecimalField(_('max cost'), max_digits=8, decimal_places=2, blank=True, null=True)

    safe_sell_price = models.DecimalField(_('safe sell price'), max_digits=8, decimal_places=2, blank=True, null=True)
    tb_url = models.URLField(_('TB URL'), null=True, blank=True)
    wd_url = models.URLField(_('WD URL'), null=True, blank=True)
    wx_url = models.URLField(_('WX URL'), null=True, blank=True)

    summary = models.TextField(_('summary'), null=True, blank=True)
    description = models.TextField(_('description'), null=True, blank=True)
    is_active = models.BooleanField(_('is active'), default=True, null=False, blank=False)

    tags = TaggableManager()
    pinyin_fields_conf = [
        ('name_cn', Style.NORMAL, False),
        ('name_cn', Style.FIRST_LETTER, False),
        ('brand.name_cn', Style.NORMAL, False),
        ('brand.name_cn', Style.FIRST_LETTER, False),
        ('alias', Style.NORMAL, False),
        ('alias', Style.FIRST_LETTER, False),
    ]

    class Meta:
        verbose_name_plural = _('Product')
        verbose_name = _('Product')

    def __str__(self):
        brand = self.brand.name if self.brand else self.brand_cn or self.brand_en
        name = self.name_cn or self.name_en
        return '%s %s' % (brand, name)

    def __init__(self, *args, **kwargs):
        super(Product, self).__init__(*args, **kwargs)
        self.set_uuid()
        field_names = ['name_en', 'name_cn', 'brand_id', 'brand_en', 'brand_cn']
        for field_name in set(field_names):
            init_value = self.get_attr_by_str(field_name)
            setattr(self._state, field_name, init_value)

    def set_uuid(self):
        if not self.uuid:
            uuid_str = uuid.uuid4().hex
            while (Product.objects.filter(uuid=uuid_str).exists()):
                uuid_str = uuid.uuid4().hex

            self.uuid = uuid_str

    def get_pic_path(self):
        if not self.uuid:
            self.set_uuid()
        return os.path.join(PRODUCT_PHOTO_FOLDER, self.uuid)

    def get_edit_link(self):
        url = reverse('product:product-update-view', args=[self.pk])
        return '<a href="%s">%s</a>' % (url, self.name_cn)

    get_edit_link.short_description = 'Name'

    def get_detail_link(self):
        url = reverse('product:product-detail-view', args=[self.pk])
        return '<a href="%s">%s</a>' % (url, self.name_cn)

    get_detail_link.short_description = 'Name'

    def get_pic_link(self):
        if self.pic:
            file_path = str(self.pic)
            # base, file_path = file_path.split('/%s' % ID_PHOTO_FOLDER)
            # url = '/%s%s' % (ID_PHOTO_FOLDER, file_path)
            url = '%s%s' % (MEDIA_URL, file_path)
            return '<a target="_blank" href="%s"><img height="60px" src="%s"></a>' % (url, url)
        else:
            return ''

    get_pic_link.allow_tags = True
    get_pic_link.short_description = 'Pic'

    def get_name_cn(self):
        if self.brand and self.brand.name_en.lower() != 'none':
            return '%s %s' % (self.brand.name, self.name_cn)
        else:
            return self.name_cn

    get_name_cn.allow_tags = True
    get_name_cn.short_description = 'CN Name'

    def stat(self):
        from apps.order.models import OrderProduct
        product_sales = OrderProduct.objects.filter(product_id=self.pk).exclude(
            sell_price_rmb=0).exclude(cost_price_aud=0).order_by('-create_time')
        if product_sales.count():
            data = product_sales.aggregate(sold_count=Sum(F('amount')),
                                           avg_sell_price=Avg(F('sell_price_rmb')),
                                           min_sell_price=Min(F('sell_price_rmb')),
                                           max_sell_price=Max(F('sell_price_rmb')),
                                           avg_cost=Avg(F('cost_price_aud')),
                                           min_cost=Min(F('cost_price_aud')),
                                           max_cost=Max(F('cost_price_aud')))
            self.last_sell_price = product_sales.first().sell_price_rmb
            self.sold_count = data.get('sold_count') or 0
            self.avg_sell_price = data.get('avg_sell_price') or None
            self.min_sell_price = data.get('min_sell_price') or None
            self.max_sell_price = data.get('max_sell_price') or None
            self.avg_cost = data.get('avg_cost') or None
            self.min_cost = data.get('min_cost') or None
            self.max_cost = data.get('max_cost') or None
        else:
            self.last_sell_price = None
            self.sold_count = 0
            self.avg_sell_price = None
            self.min_sell_price = None
            self.max_sell_price = None
            self.avg_cost = None
            self.min_cost = None
            self.max_cost = None

        self.save()

    def assign_brand(self):
        if self.brand:
            self.brand_cn = self.brand.name_cn if not self.brand_cn else self.brand_cn
            self.brand_en = self.brand.name_en if not self.brand_en else self.brand_en
        else:
            if self.brand_en:
                self.brand = Brand.objects.filter(name_en=self.brand_en).first()
            elif self.brand_cn:
                self.brand = Brand.objects.filter(name_cn=self.brand_cn).first()

    def save(self, *args, **kwargs):
        self.assign_brand()
        self.resize_image('pic')  # resize images when first uploaded
        super(Product, self).save(*args, **kwargs)
Example #15
0
class MinSizeModel(models.Model):
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          validators=[MinSizeValidator(200, 200)])
Example #16
0
class ResizeCropModel(models.Model):
    # resizes image to 640x480 croping if necessary
    image = StdImageField(upload_to='img', size=(640, 480, True))
Example #17
0
class ForceMinSizeModel(models.Model):
    """creates a thumbnail resized to maximum size to fit a 100x75 area"""
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          force_min_size=True,
                          variations={'thumbnail': (600, 600)})
Example #18
0
class ThumbnailModel(models.Model):
    # creates a thumbnail resized to maximum size to fit a 100x75 area
    image = StdImageField(upload_to='img',
                          blank=True,
                          thumbnail_size=(100, 75))
Example #19
0
class UUIDModel(models.Model):
    image = StdImageField(upload_to=UploadToUUID(path='img'))
Example #20
0
class ThumbnailCropModel(models.Model):
    # creates a thumbnail resized to 100x100 croping if necessary
    image = StdImageField(upload_to='img', thumbnail_size=(100, 100, True))
Example #21
0
class Product(ResizeUploadedImageModelMixin, PinYinFieldModelMixin,
              models.Model):
    """普通产品库,由爬虫导入,客户输入现用产品时使用,不会推荐给客人, skin_product"""
    # sku = models.CharField(max_length=36, unique=True, blank=True)
    brand = models.ForeignKey(Brand, blank=True, null=True)
    name_en = models.CharField(_(u'name_en'), max_length=512, blank=True)
    name_cn = models.CharField(_(u'name_cn'), max_length=512, blank=True)
    pinyin = models.CharField(_(u'pinyin'), max_length=1024, blank=True)
    pic = StdImageField(upload_to=UploadToClassNameDir(),
                        blank=True,
                        null=True,
                        verbose_name=_('picture'),
                        variations={
                            'thumbnail': (64, 64, True),
                        })
    alias = models.CharField(_(u'alias'), max_length=512, blank=True)
    category = models.CharField(max_length=64,
                                choices=PRODUCT_CATEGORY_CHOICES,
                                blank=True)
    description = models.TextField(_(u'description'), blank=True)
    created_at = models.DateTimeField(u"创建时间", auto_now_add=True)
    ingredients = models.ManyToManyField('product.ProductIngredient',
                                         blank=True,
                                         verbose_name=u'成分组成')

    pinyin_fields_conf = [
        ('name_cn', Style.NORMAL, False),
        ('alias', Style.NORMAL, False),
    ]

    def __str__(self):
        if self.brand and self.name_cn:
            if (self.brand.name_cn
                    and self.brand.name_cn.lower() in self.name_cn.lower()
                ) or (self.brand.name_en
                      and self.brand.name_en.lower() in self.name_cn.lower()):
                return self.name_cn
        if self.brand:
            return '%s %s' % (self.brand, self.name_cn)
        return self.name_cn

    def __init__(self, *args, **kwargs):
        super(Product, self).__init__(*args, **kwargs)
        field_names = [
            'name_en', 'name_cn', 'brand_id', 'brand_en', 'brand_cn'
        ]
        for field_name in set(field_names):
            current_value = self.get_attr_by_str(field_name)
            self._original_fields_value.update({field_name: current_value})

    def save(self, *args, **kwargs):
        self.resize_image('pic')  # resize images when first uploaded
        super(Product, self).save(*args, **kwargs)

    def get_analysis(self, oily_type, sensitive_type, pigment_type,
                     loose_type):
        analysis = self.productanalysis_set.filter(
            oily_type=oily_type,
            sensitive_type=sensitive_type,
            pigment_type=pigment_type,
            loose_type=loose_type)
        return '\n'.join([x.analysis for x in analysis])

    def have_duplicated(self):
        count = 0
        total = self.productanalysis_set.all().count()
        for i in range(total):
            for j in range(i + 1, total):
                if self.productanalysis_set.all()[i].oily_type == self.productanalysis_set.all()[j].oily_type and \
                                self.productanalysis_set.all()[i].sensitive_type == self.productanalysis_set.all()[
                            j].sensitive_type and \
                                self.productanalysis_set.all()[i].pigment_type == self.productanalysis_set.all()[
                            j].pigment_type and \
                                self.productanalysis_set.all()[i].loose_type == self.productanalysis_set.all()[
                            j].loose_type:
                    count += 1
                    print(self.productanalysis_set.all()[i].oily_type,
                          self.productanalysis_set.all()[i].sensitive_type,
                          self.productanalysis_set.all()[i].pigment_type,
                          self.productanalysis_set.all()[i].loose_type)

        if count > 0:
            return True
        return False
Example #22
0
class MultipleFieldsModel(models.Model):
    # creates a thumbnail resized to 100x100 croping if necessary
    image1 = StdImageField(upload_to='img', thumbnail_size=(100, 100, True))
    image2 = StdImageField(upload_to='img')
    image3 = StdImageField('Some label', upload_to='img')
    text = models.CharField('Some label', max_length=10)
Example #23
0
class Postcard(models.Model):

    title = models.CharField(
        max_length=100,
        help_text="Title of the postcard",
        default="",
    )

    subtitle = models.CharField(max_length=100,
                                help_text="A subtitle for the postcard",
                                null=True,
                                blank=True)

    description = models.TextField(
        default="",
        help_text="""Actual description for a postcard:
            * some story behind
            * where came it from
            * what to see""",
    )

    image = StdImageField(
        upload_to="img/postcardimages",
        blank=True,
        variations={
            "large": (1024, 1024),
            "medium": (600, 600),
            "small": (300, 300),
            "thumbnail": (150, 150, False),
        },
        delete_orphans=True,
    )

    image_description = models.TextField(
        blank=True,
        null=True,
        help_text="""
            A more formal description of the image for visual
            handicapped people -- a description that might not fit to
            the main text
        """,
    )

    backside_description_text = models.TextField(
        default="",
        blank=True,
        null=True,
        help_text=("The text on the back of a postcard explaining "
                   "what's printed there."))

    country_of_origin = models.ForeignKey(
        Country,
        on_delete=models.SET_NULL,
        null=True,
        blank=True,
        help_text="Country of origin if known.")

    creation_timestamp = models.DateTimeField(auto_now_add=True)
    last_updated = models.DateTimeField(auto_now=True)

    tags = tagulous.models.TagField(to=Tag)

    photo_copyright = models.ManyToManyField(Copyright, related_name="photo")
    print_copyright = models.ManyToManyField(Copyright, related_name="print")

    urls = models.ManyToManyField(URL,
                                  related_name="further_information",
                                  blank=True)

    published = models.BooleanField(
        default=False, help_text="Whether this postcard is visible.")
    publishing_date = models.DateTimeField(default=django.utils.timezone.now,
                                           null=True,
                                           blank=True)
    series = models.ManyToManyField(Series,
                                    related_name="series_member",
                                    blank=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse("postcard_detail", kwargs={"slug": str(self.slug)})

    @property
    def get_next_item_ID(self):
        postcardlist = list(
            Postcard.objects.filter(published=True).order_by('-id').all())
        pos = postcardlist.index(self)
        if pos == 0:
            return None
        else:
            return (postcardlist[pos - 1].id)

    @property
    def get_previous_item_ID(self):
        postcardlist = list(
            Postcard.objects.filter(published=True).order_by('-id').all())
        pos = postcardlist.index(self)
        if pos == len(postcardlist) - 1:
            return None
        else:
            return (postcardlist[pos + 1].id)

    class Meta:
        ordering = ["-id"]
Example #24
0
class SimpleModel(models.Model):
    # works as ImageField
    image = StdImageField(upload_to='img')
Example #25
0
class SimpleModel(models.Model):
    """works as ImageField"""
    image = StdImageField(upload_to='img/')
Example #26
0
class AllModel(models.Model):
    # all previous features in one declaration
    image = StdImageField(upload_to='img',
                          blank=True,
                          size=(640, 480),
                          thumbnail_size=(100, 100, True))
Example #27
0
class ResizeCropModel(models.Model):
    """resizes image to 640x480 cropping if necessary"""
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          variations={'thumbnail': (150, 150, True)})
Example #28
0
class AdminDeleteModel(models.Model):
    # can be deleted through admin
    image = StdImageField(upload_to='img', blank=True)
Example #29
0
class MaxSizeModel(models.Model):
    image = StdImageField(upload_to=UploadTo(name='image', path='img'),
                          validators=[MaxSizeValidator(16, 16)])
Example #30
0
class MaxSizeModel(models.Model):
    image = StdImageField(upload_to=upload_to,
                          validators=[MaxSizeValidator(16, 16)])