Advertisement
Guest User

Untitled

a guest
Dec 15th, 2021
40
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 1.63 KB | None | 0 0
  1. # MODELS
  2.  
  3. class User(models.Model):
  4.     name = models.CharField(max_length=50)
  5.     # ...etc...
  6.  
  7. class Assignment(models.Model):
  8.     user = models.ForeignKey(
  9.         settings.AUTH_USER_MODEL, on_delete=models.PROTECT
  10.     )
  11.     job = models.ForeignKey(Job, on_delete=models.PROTECT)
  12.     location = models.ForeignKey(Location, on_delete=models.PROTECT)
  13.  
  14. # SERIALIZER
  15.  
  16. class UserSerializer(serializers.HyperlinkedModelSerializer):
  17.     assignment_job = serializers.SerializerMethodField()
  18.     multiple_locations = serializers.SerializerMethodField()
  19.     multiple_jobs = serializers.SerializerMethodField()
  20.  
  21.     class Meta:
  22.         model = User
  23.         fields = [
  24.             "url",
  25.             "id",
  26.             "username",
  27.             "first_name",
  28.             "last_name",
  29.             "full_name",
  30.             "email",
  31.             "is_staff",
  32.             "assignment_job",
  33.             "multiple_locations",
  34.             "multiple_jobs",
  35.         ]
  36.  
  37.     def get_assignment_job(self, obj):
  38.         assignment = obj.assignment_set.get(primary=True)
  39.         return assignment.job.description
  40.  
  41.     def get_multiple_locations(self, obj):
  42.         location_count = obj.assignment_set.filter(
  43.             end_date__isnull=True
  44.         ).aggregate(total_locations=Count("location"))
  45.         if location_count["total_locations"] > 1:
  46.             return True
  47.         return False
  48.  
  49.     def get_multiple_jobs(self, obj):
  50.         job_count = obj.assignment_set.filter(end_date__isnull=True).aggregate(
  51.             total_jobs=Count("job")
  52.         )
  53.         if job_count["total_jobs"] > 1:
  54.             return True
  55.         return False
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement