Skip to content

Instantly share code, notes, and snippets.

@jpic
Last active February 1, 2016 22:11
Show Gist options
  • Save jpic/c6a16723db62f779848f to your computer and use it in GitHub Desktop.
Save jpic/c6a16723db62f779848f to your computer and use it in GitHub Desktop.
form_business
class GFKFormBusiness(object):
def value_from_object(self, instance, name):
return getattr(instance, name)
def save_form_data(self, instance, name, value):
setattr(instance, name, value)
class TestForm(forms.ModelForm):
test = autocomplete.QuerySetSequenceModelField(
form_business=GFKFormBusiness,
queryset=autocomplete.QuerySetSequence(
Group.objects.all(),
TestModel.objects.all(),
),
required=False,
)
class Meta:
model = TestModel
fields = ('name', 'test')
class TestView(generic.UpdateView):
model = TestModel
form_class = TestForm
template_name = 'form.html'
class TestForm(forms.ModelForm):
test = autocomplete.QuerySetSequenceModelField(
queryset=autocomplete.QuerySetSequence(
Group.objects.all(),
TestModel.objects.all(),
),
)
class Meta:
model = TestModel
fields = ('name',)
class TestView(generic.UpdateView):
model = TestModel
form_class = TestForm
template_name = 'form.html'
def get_form_kwargs(self):
kwargs = super(TestView, self).get_form_kwargs()
# Would have been done by GenericForeignKey.value_for_object
kwargs['initial'] = dict(test=self.object.test)
return kwargs
def form_valid(self, form):
self.object = form.save(commit=False)
# Would have been done by GenericForeignKey.save_form_data
self.object.test = form.cleaned_data['test']
self.object.save()
return super(TestView, self).form_valid(form)
from django.contrib.contenttypes.fields import GenericForeignKey
from django.db import models
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class TestModel(models.Model):
name = models.CharField(max_length=200)
content_type = models.ForeignKey(
'contenttypes.ContentType',
null=True,
blank=True,
editable=False,
)
object_id = models.PositiveIntegerField(
null=True,
blank=True,
editable=False,
)
test = GenericForeignKey('content_type', 'object_id')
def __str__(self):
return self.name
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment