Advertisement
Guest User

Untitled

a guest
Apr 30th, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. #viewset
  2. class DealViewSet(viewsets.ModelViewSet):
  3. """
  4. Get, list, create, update and delete deals with case with `case_id`.
  5. """
  6. serializer_class = serializers.DealSerializer
  7. lookup_field = 'client_generated_id'
  8.  
  9. def get_queryset(self):
  10. case_id = self.kwargs['case_client_generated_id']
  11. return Deal.objects.filter(case__client_generated_id=case_id)
  12.  
  13. #models
  14. class Note(models.Model):
  15. client_generated_id = models.UUIDField(editable=True, unique=True)
  16. case = models.ForeignKey(Case)
  17. category = models.ForeignKey(Category)
  18. party = models.ForeignKey(Party, blank=True, null=True)
  19. text = models.TextField()
  20. cancelled = models.BooleanField(default=False)
  21. private = models.BooleanField(default=False)
  22. created = models.DateTimeField()
  23.  
  24. class Meta:
  25. verbose_name = _('note')
  26. verbose_name_plural = _('notes')
  27.  
  28. def __str__(self):
  29. return str(self.id)
  30.  
  31.  
  32. class Deal(models.Model):
  33. client_generated_id = models.UUIDField(editable=True, unique=True)
  34. case = models.ForeignKey(Case)
  35. notes = models.ManyToManyField(Note, through='DealNote', through_fields=('deal', 'note'))
  36. accepted = models.BooleanField()
  37. created = models.DateTimeField()
  38.  
  39. class Meta:
  40. verbose_name = _('deal')
  41. verbose_name_plural = _('deals')
  42.  
  43. def __str__(self):
  44. return str(self.id)
  45.  
  46.  
  47. class DealNote(models.Model):
  48. AND = 'and'
  49. OR = 'or'
  50. IF = 'if'
  51. UNLESS = 'unless'
  52. CONNECTING_WORDS = (
  53. (AND, 'and'),
  54. (OR, 'or'),
  55. (IF, 'if'),
  56. (UNLESS, 'unless'),
  57. )
  58. deal = models.ForeignKey(Deal)
  59. note = models.ForeignKey(Note)
  60. connecting_word = models.CharField(max_length=40, choices=CONNECTING_WORDS, blank=True, null=True, default=None)
  61. parent = models.ForeignKey(Note, related_name='parent', blank=True, null=True, default=None)
  62.  
  63. #serializers
  64. class DealNoteSerializer(serializers.ModelSerializer):
  65. note_id = serializers.SlugRelatedField(slug_field='client_generated_id', source='note', queryset=Note.objects.all())
  66. parent_note_id = serializers.SlugRelatedField(slug_field='client_generated_id', source='parent', queryset=Note.objects.all())
  67.  
  68. class Meta:
  69. model = DealNote
  70. fields = ('note_id', 'connecting_word', 'parent_note_id')
  71.  
  72.  
  73. class DealSerializer(CaseChildSerializer):
  74. id = serializers.UUIDField(source='client_generated_id')
  75. case_id = serializers.SlugRelatedField(slug_field='client_generated_id', source='case', queryset=Case.objects.all())
  76. notes = DealNoteSerializer(many=True, read_only=False)
  77. created = UnixEpochDateTimeField(required=True)
  78.  
  79. class Meta:
  80. model = Deal
  81. fields = ('id', 'case_id', 'accepted', 'notes', 'created')
  82.  
  83. def create(self, validated_data):
  84. print('DealSerializer.create()', validated_data)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement