friendsmap/map/models.py

79 lines
2.2 KiB
Python
Raw Normal View History

2019-03-02 12:04:27 +01:00
from django.contrib.auth.models import AbstractUser
from django.db import models
2019-03-02 12:47:44 +01:00
from map.fields import CoordinateField
class BaseModel(models.Model):
class Meta:
abstract = True
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
2019-03-02 12:04:27 +01:00
class Friend(AbstractUser):
def get_display_name(self):
display_name = super().get_full_name()
if not display_name:
display_name = self.username
return display_name
2019-03-02 12:04:27 +01:00
2019-03-03 18:54:16 +01:00
@property
def _relatives_set(self):
relative_set = set()
for group in self.location_sharing_groups.all():
for relative in group.friends.all():
relative_set.add(relative)
return relative_set
@property
def relatives(self):
return list(self._relatives_set)
@property
def relatives_with_self(self):
relatives = self._relatives_set
relatives.add(self)
return list(relatives)
2019-03-02 12:04:27 +01:00
2019-03-02 12:47:44 +01:00
class FriendLocation(BaseModel):
latitude = CoordinateField()
longitude = CoordinateField()
2019-03-03 13:10:32 +01:00
start_date = models.DateField('from', blank=True, null=True, help_text='Format : YYYY-MM-DD, example : 2018-05-31')
end_date = models.DateField('until', blank=True, null=True, help_text='Format : YYYY-MM-DD, example : 2018-05-31')
2019-03-02 15:56:46 +01:00
friend = models.OneToOneField(Friend, on_delete=models.CASCADE, related_name='location')
2019-03-02 12:47:44 +01:00
@property
def latitude_str(self):
return str(self.latitude)
@property
def longitude_str(self):
return str(self.longitude)
def __str__(self):
2019-03-02 15:54:24 +01:00
result = f'{self.friend.get_display_name()}'
if self.start_date:
result += f' from {self.start_date}'
if self.end_date:
result += f' until {self.end_date}'
return result
@property
def safe_html(self):
html = f'<strong>{self.friend.get_display_name()}</strong>'
if self.start_date:
html += f' from {self.start_date}'
if self.end_date:
html += f' until {self.end_date}'
return html
2019-03-02 12:47:44 +01:00
class LocationSharingGroup(models.Model):
name = models.CharField(max_length=250)
friends = models.ManyToManyField(Friend, related_name='location_sharing_groups', blank=True)