Opened 14 years ago
Closed 10 years ago
#16127 closed Bug (worksforme)
Queryset which uses defer() method not serialize
| Reported by: | Owned by: | nobody | |
|---|---|---|---|
| Component: | Core (Serialization) | Version: | 1.3 |
| Severity: | Normal | Keywords: | |
| Cc: | Triage Stage: | Accepted | |
| Has patch: | no | Needs documentation: | no |
| Needs tests: | no | Patch needs improvement: | no |
| Easy pickings: | no | UI/UX: | no |
Description (last modified by )
Hello!
I have this function using json and a queryset with defer() method, but the fields not target in queryset, i need only "id" and "nome":
models.py
class Pessoa(models.Model):
nome = models.CharField(max_length=50)
data_nascimento = models.DateField()
data_inclusao = models.DateField()
cpf = models.CharField(max_length=14)
telefone = models.CharField(max_length=13)
celular = models.CharField(max_length=13)
class Meta:
abstract = True
class Proprietario(Pessoa):
endereco = models.ForeignKey(Endereco)
def __unicode__(self):
return "%s, %s" % (self.nome, self.cpf)
views.py:
def load_proprietarios(request):
data = serializers.serialize('json',Proprietario.objects.defer('cpf','telefone','celular','data_nascimento','data_inclusao',),ensure_ascii=False))
return HttpResponse(data, mimetype="application/javascript")
This is the output:
[{"pk": 1, "model": "proprietario.proprietario_deferred_celular_cpf_telefone_data_inclusao_data_nascimento", "fields": {}}]
Note that the "id" and the "nome" fields (class Proprietario / class abstract Pessoa) does not appear after defer() method.
Regards.
Change History (6)
comment:1 by , 14 years ago
| Component: | Database layer (models, ORM) → Core (Serialization) |
|---|---|
| Description: | modified (diff) |
| Triage Stage: | Unreviewed → Accepted |
comment:2 by , 14 years ago
| UI/UX: | unset |
|---|
comment:3 by , 14 years ago
A test for this issue can be found at https://github.com/knutz3n/django/commit/3339f94a8bb4162f9ea650a935917f004726a9a8.
comment:4 by , 14 years ago
| Summary: | Queryset which uses defer() method not serialize in Json → Queryset which uses defer() method not serialize |
|---|
The bug seems to apply to all serializers, not only JSON.
comment:5 by , 10 years ago
I tested this on the current master branch and this no longer seems to be a problem.
comment:6 by , 10 years ago
| Resolution: | → worksforme |
|---|---|
| Status: | new → closed |
This bug report should be simplified with a simpler model and view as given below.
models.py:
class Person(models.Model): name = models.CharField(max_length=50) phone = models.CharField(max_length=13)view.py:
objects = Person.objects.defer('phone') data = serializers.serialize('json', objects, ensure_ascii=False) return HttpResponse(data, mimetype="application/javascript")Output:
[{"pk": 1, "model": "ticket.person_deferred_phone", "fields": {}}]Specifying fields to the serializer like below, gives the same result.
data = serializers.serialize('json', objects, ensure_ascii=False, fields=('name',))The same issue also applies when using .only().
I would argue that when fields are not specified to the serializer, the entire object should be loaded and serialized.