2016-02-09 49 views
8

Witam Chcę złączyć więcej pól język Django, ale nawet ten prosty kod:Django annotate() Błąd AttributeError: obiekt 'Charfield' nie ma atrybutu 'resolve_expression'

Project.objects.annotate(
     companyname=Concat('company__name',Value('ahoj')),output_field=CharField()  
    ) 

wyskakuje mi błąd:

AttributeError: 'CharField' object has no attribute 'resolve_expression' 

Traceback:

File "/root/MUP/djangoenv/lib/python3.4/site-packages/django/db/models/manager.py", line 122, in manager_method 
    return getattr(self.get_queryset(), name)(*args, **kwargs) 
    File "/root/MUP/djangoenv/lib/python3.4/site-packages/django/db/models/query.py", line 908, in annotate 
    clone.query.add_annotation(annotation, alias, is_summary=False) 
    File "/root/MUP/djangoenv/lib/python3.4/site-packages/django/db/models/sql/query.py", line 986, in add_annotation 
    annotation = annotation.resolve_expression(self, allow_joins=True, reuse=None, 
AttributeError: 'CharField' object has no attribute 'resolve_expression' 

Odpowiedz

15

masz nawias zamykający w niewłaściwym miejscu. Argument output_field jest argumentem dla Contcat, a nie dla annotate. Powinno być:

Project.objects.annotate(
    companyname=Concat('company__name', Value('ahoj'), output_field=CharField()),  
) 
+1

O cholera. Dzięki. Mają naprawdę zły przykład z nawiasami w dokumentacji. https://docs.djangoproject.com/en/1.9/ref/models/database-functions/#concat '.annotate (screen_name = Concat ('name', V ('('), 'goes_by', V (')'), output_field = CharField())) ' – Adam

+0

Tak, zgadzam się, że przykład w dokumentach jest trudny do odczytania. Jeśli otworzyłeś żądanie ściągnięcia, aby zmienić formatowanie, jestem pewien, że zostanie zaakceptowany. – Alasdair

Powiązane problemy