2012-03-28 16 views
10

Tôi có một mô hình:Django ép buộc sang Unicode: cần chuỗi hoặc đệm, datetime.date tìm thấy

class MyModel(models.Model): 
    id = models.IntegerField(primary_key=True) 
    recorded_on = models.DateField() 
    precipitation = models.FloatField(null=True, blank=True) 

trong quan điểm của tôi, tôi có một câu hỏi như sau:

import datetime 

def my_view(request): 
    ... 
    format = '%Y-%m-%d' 
    sd = datetime.datetime.strptime(startdate, format) 
    ed = datetime.datetime.strptime(enddate, format) 
    queryset = MyModel.objects.filter((recorded_on__range = (sd, ed))) 
    ... 

Nhưng bất cứ khi nào tôi cố gắng và làm bất cứ điều gì với queryset (ví dụ như json dump, hiển thị trong mẫu), tôi nhận được các lỗi sau đây:

coercing to Unicode: need string or buffer, datetime.date found 

Tôi biết phải có một cách dễ dàng để dea l với điều này, nhưng tôi chưa tìm thấy nó.

Mọi trợ giúp sẽ được đánh giá cao.

EDIT:

Một ví dụ về dữ liệu:

+----+-------------+---------------+ 
| id | recorded_on | precipitation | 
+----+-------------+---------------+ 
| 24 | 1987-07-02 |   20.7 | 
| 33 | 1987-07-11 |   0.4 | 
+----+-------------+---------------+ 
+1

Vui lòng hiển thị truy nguyên thực tế. Dòng nào gây ra lỗi? –

+0

là bạn bởi bất kỳ thay đổi cố gắng để nối 'record_on' với chuỗi unicode sử dụng toán tử' + '? Nếu vậy, cách để làm điều đó là 'u 'một chuỗi" + str (obj.recorded_on) ' – vartec

+0

Traceback của tôi hơi khác so với bài viết, vì tôi đã đơn giản hóa nó - tôi nghi ngờ đây là một vấn đề chung. Nhưng dòng mã của tôi mà django phàn nàn là dòng views.py hiển thị mẫu. Liên kết ở đây: http://dpaste.com/722851/. Tôi cũng đã thử truy vấn trong trình bao và chỉ cố gắng in hoặc lặp lại queryset cho cùng một lỗi. –

Trả lời

22

Bạn chưa thể hiện đầy đủ các mã, nhưng tôi nghi ngờ vấn đề là với phương pháp của mô hình của bạn __unicode__. Điều này cần phải trả về một chuỗi unicode thực tế - nếu bạn chỉ đang thực hiện return self.recorded_on sẽ không thành công với lỗi đã cho. Hãy thử một cái gì đó như return unicode(self.recorded_on) hoặc sử dụng strftime để chuyển đổi sang định dạng ngày mong muốn của bạn, ví dụ: self.recorded_on.strftime('%Y-%m-%d').

+1

Hoàn hảo. Cảm ơn bạn. Tôi thực sự không có ý tưởng vấn đề có thể được với mô hình! –

Các vấn đề liên quan