1
0
Fork 0
mirror of https://github.com/seanmorley15/AdventureLog.git synced 2025-07-19 04:49:37 +02:00

Add new model fields and remove old ones

This commit is contained in:
Sean Morley 2024-09-22 00:07:45 -04:00
parent 78f56a3a5f
commit eab312e94e
4 changed files with 88 additions and 32 deletions

View file

@ -1,5 +1,5 @@
import os
from .models import Adventure, AdventureImage, ChecklistItem, Collection, Note, Transportation, Checklist
from .models import Adventure, AdventureImage, ChecklistItem, Collection, Note, Transportation, Checklist, Visit
from rest_framework import serializers
class AdventureImageSerializer(serializers.ModelSerializer):
@ -17,20 +17,49 @@ class AdventureImageSerializer(serializers.ModelSerializer):
public_url = public_url.replace("'", "")
representation['image'] = f"{public_url}/media/{instance.image.name}"
return representation
class VisitSerializer(serializers.ModelSerializer):
class Meta:
model = Visit
fields = ['id', 'start_date', 'end_date', 'notes']
read_only_fields = ['id']
class AdventureSerializer(serializers.ModelSerializer):
images = AdventureImageSerializer(many=True, read_only=True)
visits = VisitSerializer(many=True, read_only=False)
class Meta:
model = Adventure
fields = ['id', 'user_id', 'name', 'description', 'rating', 'activity_types', 'location', 'date', 'is_public', 'collection', 'created_at', 'updated_at', 'images', 'link', 'type', 'longitude', 'latitude', 'end_date']
fields = ['id', 'user_id', 'name', 'description', 'rating', 'activity_types', 'location', 'is_public', 'collection', 'created_at', 'updated_at', 'images', 'link', 'type', 'longitude', 'latitude', 'visits']
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id']
def to_representation(self, instance):
representation = super().to_representation(instance)
return representation
def create(self, validated_data):
visits_data = validated_data.pop('visits', [])
adventure = Adventure.objects.create(**validated_data)
for visit_data in visits_data:
Visit.objects.create(adventure=adventure, **visit_data)
return adventure
def update(self, instance, validated_data):
visits_data = validated_data.pop('visits', [])
instance = super().update(instance, validated_data)
# Update or create visits
for visit_data in visits_data:
visit_id = visit_data.get('id', None)
if visit_id:
visit = Visit.objects.get(id=visit_id, adventure=instance)
for attr, value in visit_data.items():
setattr(visit, attr, value)
visit.save()
else:
Visit.objects.create(adventure=instance, **visit_data)
return instance
class TransportationSerializer(serializers.ModelSerializer):
class Meta:
@ -59,17 +88,7 @@ class ChecklistItemSerializer(serializers.ModelSerializer):
'id', 'user_id', 'name', 'is_checked', 'checklist', 'created_at', 'updated_at'
]
read_only_fields = ['id', 'created_at', 'updated_at', 'user_id', 'checklist']
# def validate(self, data):
# # Check if the checklist is public and the checklist item is not
# checklist = data.get('checklist')
# is_checked = data.get('is_checked', False)
# if checklist and checklist.is_public and not is_checked:
# raise serializers.ValidationError(
# 'Checklist items associated with a public checklist must be checked.'
# )
class ChecklistSerializer(serializers.ModelSerializer):
items = ChecklistItemSerializer(many=True, source='checklistitem_set')
class Meta:
@ -133,9 +152,6 @@ class ChecklistSerializer(serializers.ModelSerializer):
return data
class CollectionSerializer(serializers.ModelSerializer):
adventures = AdventureSerializer(many=True, read_only=True, source='adventure_set')
transportations = TransportationSerializer(many=True, read_only=True, source='transportation_set')