I have a Django model Adventure with two datetime fields:
from django.db import models
class Adventure(models.Model):
start_time = models.DateTimeField()
end_time = models.DateTimeField()
(...)
There's an instance of Adventure, let's say:
Adventure(start_time=TIME_1, end_time=TIME_2, ...)
Assuming there is some TIME_X between TIME_1 and TIME_2 (TIME_1 < TIME_X < TIME_2), how can I split one Adventure object into two separate objects, so after splitting I would have:
#first instance
Adventure(start_time=TIME_1, end_time=TIME_X, ...)
#second instance
Adventure(start_time=TIME_X, end_time=TIME_2, ...)
Adventure has more fields, which should be the same for both instances (except for PK, of course).
CodePudding user response:
You can do it with a method:
import copy
original_adventure = Adventure(start_time=TIME_1, end_time=TIME_2, ...)
adventure_split_1, adventure_split_2 = split_adventure(original_adventure, TIME_MIDDLE)
def split_adventure(adventure, middle_time):
adventure_split_1 = copy.deepcopy(adventure)
adventure_split_1.end_time = middle_time
adventure_split_2 = copy.deepcopy(adventure)
adventure_split_2.start_time = middle_time
return (adventure_split_1, adventure_split_2)
CodePudding user response:
You could simply use orm methods to change one existing object and create only one new object:
# Get the first instance
adventure = Adventure.objects.get(start_time=TIME_1, end_time=TIME_2, ...)
middle_time = TIME_X
# save old end_time
old_end_time = adventure.end_time
# Modify first instance and save to DB
adventure.end_time = middle_time
adventure.save()
# Create new instance
adventure.pk = None
adventure.start_time = middle_time
adventure.end_time = old_end_time
adventure.save() # This will create a new object
As a result you will have two database entries with your other attributes the same except for the two start_time and end_time attributes.
