Hi,
I have an issue with regard to exposing a RESTful interface using
filtersets and HyperLinkedModelserialisers. I have two model classes
defined thus:
class Manufacturer(CommonExtendedIcon):
WebSite=models.CharField(max_length=1024)
StandardList=models.BooleanField(default=False)
SourceURL=models.CharField(max_length=1024,null=True)
LastChecked=models.DateTimeField(null=True)
def __str__(self):
return self.Name
class ManufacturerModel(CommonExtendedIcon):
Manufacturer=models.ForeignKey(Manufacturer, related_name='models')
WebSite=models.CharField(max_length=1024)
SeriesStartDate=models.IntegerField(null=True)
SeriesEndDate=models.IntegerField(null=True)
SourceUrl=models.CharField(max_length=1024,null=True, default='')
LastChecked=models.DateTimeField(null=True)
def __str__(self):
return self.Name
Now in my my rest Interface I make a query to retrieve say all of the
Manufacturer Models with a Manufacturer begining with 'A'. Looking at the
SQL that is subsequently run I can thus see that there are over 4000
queries issued. 1 to retrieve all of the ManufacturerModel Records and then
1 for EACH individual linked Manufacturer. Why is this and how can I stop
this behaviour but still bring back the Manufacturer Details. I expected
instead the first query to load all of the data.
Here are my serialiser classes:-
class ManufacturerSerialiser(serializers.HyperlinkedModelSerializer):
class Meta:
model = Manufacturer
fields =
('WebSite','LogoLocation','Name','id','StandardList','SourceURL')
class ManufacturerModelSerialiser(serializers.HyperlinkedModelSerializer):
manufacturer =
serializers.HyperlinkedIdentityField(view_name='manufacturer')
class Meta:
model = ManufacturerModel
fields =
('WebSite','LogoLocation','Name','id','Manufacturer','SeriesStartDate','SeriesEndDate','SourceUrl','LastChecked')
And Finally my FilterSets
class ManufacturerFilter(django_filters.FilterSet):
Name = django_filters.CharFilter(lookup_type='icontains')
Website = django_filters.CharFilter(lookup_type='icontains')
class Meta:
model=Manufacturer
fields = ('WebSite','LogoLocation','Name','id','StandardList')
class ManufacturerModelFilter(django_filters.FilterSet):
Manufacturer=django_filters.CharFilter(name='Manufacturer__Name',
lookup_type='icontains')
Name = django_filters.CharFilter(lookup_type='icontains')
Website = django_filters.CharFilter(lookup_type='icontains')
class Meta:
model=ManufacturerModel
fields =
('WebSite','LogoLocation','Name','id','Manufacturer','LastChecked')
I know that If I remove the 'Manufacturer' field from the
ManufacturerModel serialisation classes it works as expected meaning that
it is the relationship that is causing this behaviour (the extra 4000 SQL
Queries) .
--
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 [email protected].
To post to this group, send email to [email protected].
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/12b75d3a-0610-4d66-bcb8-e265cd0c2505%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.