Prince
Prince

Reputation: 81

Cannot save new object in one to one relationship using django rest framework

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

Answers (1)

levi
levi

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

Related Questions