Reputation: 81
I have the following django classes:
class Event(models.Model):
calendar = models.ForeignKey(Calendar, related_name='cal_event')
department = models.ForeignKey(Department, related_name='events')
title = models.CharField(max_length=30)
date = models.DateTimeField('event date')
roles = models.ManyToManyField(Role, through='EventRoles')
class Meta:
db_table = "event"
unique_together = ("date", "department")
class EventId(models.Model):
event = models.OneToOneField(Event, primary_key=True, related_name='event_number')
number = models.IntegerField(default=0)
class Meta:
db_table = "event_id"
The django rest serializer class for EventId is as follows:
class EventIdS(serializers.ModelSerializer):
class Meta:
model = EventId
Now whenever I try to save a new EventId
object, the code fails at the instance of saving it. For example:
def put(self, request, event_pk, format=None):
# Get an existing event object
event = get_object_or_404(Event, pk=event_pk)
# Get id number from ajax request
event_id = request.data.get('id', None)
if event_id:
db_data = {
'event' : event.id,
'number' : event_id
}
idSerial = EventIdS(event, data=db_data)
if idSerial.is_valid():
eventID = event.event_number
eventID.number = event_id
eventID.save()
The code fails at eventID.save()
and I don't know why. Whenever I print event_id
, it is a long number (example: 12L). What am I missing? Any ideas will be gladly welcomed.
Upvotes: 0
Views: 497
Reputation: 22697
You should call .save()
over idSerial
first, it will returns eventID
updated instance, then you can set number attribute then save it.
idSerial = EventIdS(event, data=db_data)
if idSerial.is_valid():
eventID = idSerial.save()
eventID.number = event_id
eventID.save()
Upvotes: 1