First off: this sounds like a bug, please log an issue on Github with as much info as possible (router, serializer and model etc. if you can)
I would recommend not using `SelfPublishModel` in this scenario, instead publish the event manually. If you do it manually you lose out on having it publish when you save via admin (but you do get more control over when the publish occur, and you could of course add an action to admin to do this). Two ways you can publish the model: Using `publish_data` you could go about it this way from swampdragon.pubsub_providers.data_publisher import publish_data def publish_event(event): serializer = EventSerializer(instance=event) channel = 'public_events' publish_data(channel, serializer.serialize()) The "drawback" of this is that you have to know the actual channel you are publishing to, and you wouldn't be able to use the `DataMapper` in JavaScript since it doesn't know if this set of data was a create, delete or an update action (publish_data was made with the intent to publish dictionaries rather than models). If you use the `DataMapper` in JS, or have lots of subscribers on various channels all relating to the same model, or don't know the channel name, then use `publish_model` instead (this is probably the most recommended way). `publish_model` will find the channels for you, but requires to know the action (was it an update, was it a delete or was it created?) from swampdragon.pubsub_providers.model_publisher import publish_model def publish_event(event): action = 'created' # you can use created, updated, deleted publish_model(event, EventSerializer, action) So if you have a view where you create/update events you can simply add this (assuming CBV) to your view: class EventCreateView(CreateView): model = Event def form_valid(form): event = form.save() publish_event(event) return HttpResponseRedirect(self.get_success_url()) You could easily modify `publish_event` to take the action as a parameter On Monday, January 19, 2015 at 2:57:16 PM UTC+1, Shazwi Suwandi wrote: > > I'm using Swampdragon to provide real time updates to the system since I > don't want users to keep refreshing their page to get them. I used the > *ModelPublisherRouter* which causes me to get any updates to a particular > model. > > I currently have an Events model with the following attributes: > class Event(SelfPublishModel, models.Model): > serializer_class = EventSerializer > name = models.CharField(max_length=250) > description = models.CharField(max_length=250) > location = models.CharField(max_length=250) > privacy = models.CharField(max_length=250) > startDate = models.DateField() > endDate = models.DateField() > allDay = models.BooleanField(default=False) > noOfAttendees = models.IntegerField(default=0) > noOfNonAttendees = models.IntegerField(default=0) > noOfInvitees = models.IntegerField(default=0) > eventOwner = models.ForeignKey(User, related_name='eventsOwned') > eventInvitees = models.ManyToManyField(User, > related_name='eventInvitees') > eventAttendees = models.ManyToManyField(User, > related_name='eventAttendees') > eventNonAttendees = models.ManyToManyField(User, > related_name='eventNonAttendees') > > As you can see, there are three many to many relationships with the User > table. If I edit an event's name and description without doing any > changes to eventInvitees, eventAttendees or eventNonAttendees, I was > expecting just one "publish" from Swampdragon since there is a change > in the Events row. However, it "publishes" the update, 6 more times and I > suspect it is because of the rows in the join tables as it does not publish > 6 times when I comment out these relationships. > > I then checked the join tables and every time I do an update through the > admin UI, even if I did not add or remove users, it changes the primary key > of the rows, causing the publish from Swampdragon to be done. Is there any > way I can avoid having the IDs change? > -- You received this message because you are subscribed to the Google Groups "Django users" group. To unsubscribe from this group and stop receiving emails from it, send an email to django-users+unsubscr...@googlegroups.com. To post to this group, send email to django-users@googlegroups.com. Visit this group at http://groups.google.com/group/django-users. To view this discussion on the web visit https://groups.google.com/d/msgid/django-users/9bdf564e-2456-4326-b965-213b0fd5307c%40googlegroups.com. For more options, visit https://groups.google.com/d/optout.