By adding some debug code in /usr/lib/python3.6/site-packages/django/db/backends/base/creation.py I have made some progress with this "bug" (which I am no longer convinced it is).
The issue relates to a load of derived classes, as follows :
class DataSet(models.Model)
class PSessionDataSet(DataSet)
:::
class FilteredDataSet(DataSet)
class AggregateDataSet(DataSet)
class SurveyRunDataSet(DataSet)
class RestrictedDataSet(SurveyRunDataSet)
These all have the same app_label value ("dataset") in their Meta class, and are thus in the same "group" of models.
However, the debug logging line reveals that Django thinks all these classes share the same default manager (_default_manager), namely dataset.AggregateDataSet.objects:
Model Default Manager
:::
app.survey.models.grid.GridRow survey.GridRow.objects
app.analysis.models.Analysis analysis.Analysis.objects
app.analysis.report.models.AnalysisReport report.AnalysisReport.objects
app.analysis.dataset.models.dataset.DataSet dataset.AggregateDataSet.objects
app.analysis.dataset.models.survey_run.SurveyRunDataSet dataset.AggregateDataSet.objects
app.analysis.dataset.models.filtered.FilteredDataSet dataset.AggregateDataSet.objects
app.analysis.dataset.models.restricted.RestrictedDataSet dataset.AggregateDataSet.objects
Now I know the documentation says the default manager is chosen as the first it happens to come across in the model group. But that sounds absolutely barking mad. Shouldn't each of these models have their own model-specific default manager, as all the models preceding the "dataset" models do in the above table?!
Otherwise surely the manager will have trouble finding various columns/values in a model table other than the one on which it is based, which is exactly the error I am seeing!
So now my problem becomes how to tweak each of these "dataset" models so their default managers will become as follows :
Model Default Manager
:::
app.survey.models.grid.GridRow survey.GridRow.objects
app.analysis.models.Analysis analysis.Analysis.objects
app.analysis.report.models.AnalysisReport report.AnalysisReport.objects
app.analysis.dataset.models.dataset.DataSet dataset.DataSet.objects
app.analysis.dataset.models.survey_run.SurveyRunDataSet dataset.SurveyRunDataSet.objects
app.analysis.dataset.models.filtered.FilteredDataSet dataset.FilteredDataSet.objects
app.analysis.dataset.models.restricted.RestrictedDataSet dataset.RestrictedDataSet.objects
Would that just be a matter of adding lines as follows (typically in the FilteredDataSet class) :
objects = FilteredDataSet.Manager()
or does one need a more elaborate overriding of get_queryset() ?
Any ideas gratefully received.
?