class Comments(models.Model): author = models.ForeignKey(to="User", related_name="comments", on_delete=models.CASCADE) comment = fields.EncryptedTextField() likes = models.ManyToManyField(to="User", related_name="comment_liker", blank=True) content = models.ForeignKey(to="Content", related_name="commented_stuff", on_delete=models.CASCADE) created_at = fields.EncryptedDateTimeField(default=timezone.now) updated_at = fields.EncryptedDateTimeField(default=timezone.now) def __str__(self): return self.comment
class Content(models.Model): member = models.ForeignKey(to="User", related_name="poster", on_delete=models.CASCADE) author = models.CharField(max_length=255, blank=True, null=True) circle = models.ForeignKey(to="Circle", related_name="posts", on_delete=models.CASCADE) text_post = fields.EncryptedTextField(blank=True, null=True) img_post = models.ImageField(upload_to='images', blank=True, null=True) caption = fields.EncryptedCharField(max_length=200, blank=True, null=True) likes = models.ManyToManyField(to="User", related_name="content_liker", blank=True) created_at = fields.EncryptedDateTimeField(default=timezone.now) updated_at = fields.EncryptedDateTimeField(default=timezone.now) tags = models.ForeignKey(to="User", related_name="tagged", on_delete=models.CASCADE, blank=True, null=True) def __str__(self): return self.text_post
class Circle(models.Model): name = fields.EncryptedCharField(max_length=100) admin = models.ForeignKey(to="User", related_name="is_admin", on_delete=models.CASCADE) members = models.ManyToManyField(to="User", related_name="mates", blank=True) pending_members = models.ManyToManyField(to="User", related_name="pending", blank=True) created_at = fields.EncryptedDateTimeField(default=timezone.now) def __str__(self): return self.name
class SearchDateTime(models.Model): value = fields.EncryptedDateTimeField() search = fields.SearchField(hash_key="abc123", encrypted_field_name="value")
class EncryptedDateTime(models.Model): value = fields.EncryptedDateTimeField()
class DemoModel(models.Model): """Note that all regulare kwargs are added to EncryptedFields and not SearchFields. Eg 'default=', 'null=', 'blank='. Also note that we declare the SearchField *after* its EncryptedField. This is only important when using DRF ModelSerializers, but never the less should be the standard way of doing it.""" _email_data = fields.EncryptedEmailField() email = fields.SearchField(hash_key="123abc", encrypted_field_name="_email_data") _name_data = fields.EncryptedCharField( max_length=10, blank=True, null=True, help_text="This field is not required.") name = fields.SearchField(hash_key="123abc", encrypted_field_name="_name_data") _date_data = fields.EncryptedDateField() date = fields.SearchField(hash_key="123abc", encrypted_field_name="_date_data") date_2 = fields.EncryptedDateField( blank=True, null=True, help_text="This field is just encrypted and is not required.", ) _number_data = fields.EncryptedPositiveSmallIntegerField() number = fields.SearchField(hash_key="123abc", encrypted_field_name="_number_data") _text_data = fields.EncryptedTextField( help_text="A text area. Not typically used with a SearchField.") text = fields.SearchField(hash_key="123abc", encrypted_field_name="_text_data") info = fields.EncryptedCharField( blank=True, null=False, max_length=20, help_text= "Char field, required at db level, without a default and blank=True", ) # Examples with defaults _default_date_data = fields.EncryptedDateField(default=datetime.date.today) default_date = fields.SearchField( hash_key="123abc", encrypted_field_name="_default_date_data") _default_number_data = fields.EncryptedPositiveSmallIntegerField(default=1) default_number = fields.SearchField( hash_key="123abc", encrypted_field_name="_default_number_data") _default_char_data = fields.EncryptedCharField(default="foo default", max_length=20) default_char = fields.SearchField( hash_key="123abc", encrypted_field_name="_default_char_data") # typical use case created_at = fields.EncryptedDateTimeField(auto_now_add=True) updated_at = fields.EncryptedDateTimeField(auto_now=True) def __str__(self): return f"{self.pk}: {self.name}" def get_absolute_url(self): return reverse("demomodel-list")