Skip to content

Instantly share code, notes, and snippets.

@alculquicondor
Last active October 20, 2017 14:00
Show Gist options
  • Save alculquicondor/5c30202f81a984791a6bf838e3a62105 to your computer and use it in GitHub Desktop.
Save alculquicondor/5c30202f81a984791a6bf838e3a62105 to your computer and use it in GitHub Desktop.
# models.py
class Subscription(models.Model):
pass
class User(models.Model):
subscription = models.ForeignKey(Subscription, null=True,
blank=True, related_name='users',
on_delete=models.SET_NULL)
# admin.py
class SubscriptionAdminForm(forms.ModelForm):
class Meta:
model = Subscription
fields = ()
# users = make_ajax_field(Subscription, 'users', 'user')
users = AutoCompleteSelectMultipleField('user', required=False)
def __init__(self, *args, **kwargs):
super(SubscriptionAdminForm, self).__init__(*args, **kwargs)
if self.instance:
self.fields['users'].initial = self.instance.users.all()
class SubscriptionAdmin(admin.ModelAdmin):
form = SubscriptionAdminForm
def save_model(self, request, obj, form, change):
# TODO: do changes in a transaction
super(SubscriptionAdmin, self).save_model(request, obj, form, change)
form.fields['users'].initial.update(subscription=None)
User.objects.filter(
id__in=form.cleaned_data['users']).update(subscription=obj)
admin.site.register(Subscription, SubscriptionAdmin)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment