示例#1
0
class Activity(models.Model):
    name = models.CharField(verbose_name=_("Activity type"), max_length=100)
    slug = models.SlugField(blank=True)
    organization = models.ForeignKey(Organization,
                                     on_delete=models.CASCADE,
                                     related_name="activities")
    description = CleanHTMLField(verbose_name=_("Activity description"),
                                 default="")
    picture = models.ImageField(
        verbose_name=_("Image"),
        upload_to="activities/",
        blank=True,
        null=True,
        validators=[validate_image],
    )
    history = HistoricalRecords()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        return super().save(*args, **kwargs)

    def __str__(self):
        return self.name

    def get_absolute_url(self):
        return reverse("event:activity_detail", args=(self.pk, self.slug))

    def next_events(self):
        return get_future_published_events(self.events)[0:3]
示例#2
0
class Place(models.Model):
    name = models.CharField(max_length=100, verbose_name=_("Name"))
    organization = models.ForeignKey(
        Organization,
        on_delete=models.CASCADE,
        null=True,
        blank=True,
        related_name="places",
    )
    description = CleanHTMLField(
        default="", verbose_name=_("Place description")
    )
    category = models.CharField(max_length=100, default="Other")
    slug = models.SlugField(default="", blank=True)
    address = models.CharField(
        max_length=255, verbose_name=_("street address")
    )
    longitude = models.FloatField()
    latitude = models.FloatField()
    picture = models.ImageField(
        upload_to="places/", 
        blank=True, 
        null=True,
        validators=[validate_image],
        verbose_name=_("Image"),
    )
    is_visible = models.NullBooleanField(
        _("Lieu principal"),
        default=False, 
        help_text=_(
            "Est-ce que ce lieu est un lieu de votre organisation ? Si vous cochez oui, il sera visible sur votre page"
        ),
    )
    created_at = models.DateTimeField(auto_now_add=True)
    updated_at = models.DateTimeField(auto_now=True)
    history = HistoricalRecords()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        return super().save(*args, **kwargs)

    def get_absolute_url(self):
        return reverse("location:detail", args=(self.pk, self.slug))

    def future_published_events(self):
        return get_future_published_events(self.events)

    def __str__(self):
        return self.name
示例#3
0
class CustomUser(AbstractBaseUser, PermissionsMixin):
    GENDER_MALE = "m"
    GENDER_FEMALE = "f"
    GENDER_OTHER = "n"
    GENDERS = (
        (GENDER_MALE, _("Male")),
        (GENDER_FEMALE, _("Female")),
        (GENDER_OTHER, _("Other")),
    )

    email = models.EmailField(_("email address"), max_length=254, unique=True)
    first_name = models.CharField(_("first name"), max_length=30, default="")
    last_name = models.CharField(_("last name"), max_length=30, default="")
    street_address = models.CharField(verbose_name=_("street address"),
                                      max_length=255,
                                      default="-")
    phone_number = models.CharField(_("phone number"),
                                    max_length=10,
                                    blank=True,
                                    default="-")
    birth_date = models.DateField(_("date of birth"), blank=True, null=True)
    gender = models.CharField(max_length=1,
                              choices=GENDERS,
                              blank=True,
                              default=GENDER_OTHER)
    avatar_img = models.ImageField(
        verbose_name=_("Avatar"),
        upload_to="media/avatar/",
        null=True,
        blank=True,
    )

    username = ""

    bio = CleanHTMLField(_("bio"), blank=True, default="")

    is_staff = models.BooleanField(
        _("staff status"),
        default=False,
        help_text=_(
            "Designates whether the user can log into this admin site."),
    )
    is_active = models.BooleanField(
        _("active"),
        default=True,
        help_text=_("Designates whether this user should be treated as "
                    "active. Unselect this instead of deleting accounts."),
    )
    date_joined = models.DateTimeField(_("date joined"), default=timezone.now)
    is_visible = models.BooleanField(
        _("Profile visible"),
        default=False,
        help_text=_("Should people be able to see your profile?"),
    )
    history = HistoricalRecords()

    objects = CustomUserManager()

    USERNAME_FIELD = "email"

    def get_organizations(self):
        return self.member_organizations.all().union(
            self.visitor_organizations.all(),
            self.active_organizations.all(),
            self.volunteer_organizations.all(),
            self.admin_organizations.all(),
        )

    def get_absolute_url(self):
        return reverse("user:user_detail", kwargs={"pk": self.pk})

    def __str__(self):
        if self.first_name:
            return f"{self.first_name} {self.last_name}"
        return self.email
示例#4
0
class Organization(models.Model):
    name = models.CharField(max_length=100,
                            default="",
                            verbose_name=_("Organization name"))
    description = CleanHTMLField(verbose_name=_("Activity description"),
                                 default="")
    email = models.EmailField(max_length=200,
                              verbose_name=_("Organization mail address"),
                              blank=True)
    website = models.URLField(max_length=200,
                              verbose_name=_("Organization website mail"),
                              blank=True)
    phone_number = models.CharField(_("Organization phone number"),
                                    max_length=10,
                                    blank=True,
                                    default="-")
    picture = models.ImageField(
        verbose_name=_("Image"),
        upload_to="organizations/",
        validators=[validate_image],
    )
    slug = models.SlugField(default="", unique=True)
    visitors = models.ManyToManyField(CustomUser,
                                      related_name="visitor_organizations",
                                      blank=True)
    members = models.ManyToManyField(
        CustomUser,
        related_name="member_organizations",
        blank=True,
        through="Membership",
    )
    volunteers = models.ManyToManyField(CustomUser,
                                        related_name="volunteer_organizations",
                                        blank=True)
    actives = models.ManyToManyField(CustomUser,
                                     related_name="active_organizations",
                                     blank=True)
    admins = models.ManyToManyField(CustomUser,
                                    related_name="admin_organizations",
                                    blank=True)
    min_fee = models.PositiveIntegerField(
        verbose_name=_("Minimum contribution"), default=0, blank=True)
    advised_fee = models.PositiveIntegerField(
        verbose_name=_("Advised contribution"), default=0, blank=True)
    fee_description = models.TextField(
        verbose_name=_("Explain how the contribution system works"),
        default="",
        blank=True,
    )
    history = HistoricalRecords()

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        return super().save(*args, **kwargs)

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

    @property
    def actives_or_more(self):
        return self.actives.union(self.admins.all())

    def __str__(self):
        return self.name
def test_html_field():
    field = CleanHTMLField()
    with pytest.raises(ValidationError):
        field.clean("<script>alert(0)</script>", Place)