2011-11-06 35 views
6
from django import forms 

class SignUpForm(forms.Form): 
    birth_day = forms.ChoiceField(choices=range(1,32)) 

Tôi nhận được "Loại lỗi khi hiển thị: đối tượng 'int' không thể lặp lại". https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices cho biết đối số lựa chọn có thể lặp lại như danh sách hoặc bộ tuple.Lựa chọn biểu mẫu DjangoLoại phạm vi(): 'int' đối tượng không thể lặp lại

http://docs.python.org/library/functions.html#range nói range() tạo danh sách.

Tại sao tôi gặp lỗi?

Tôi đã thử chuyển đổi danh sách thành str bằng bản đồ() nhưng đã nhận được các lỗi khác nhau.

Trả lời

15

... cho biết đối số lựa chọn có thể lặp lại như danh sách hoặc bộ dữ liệu.

Không, phải mất có thể lặp lại của 2-tuples.

Có thể lặp lại (ví dụ: danh sách hoặc bộ) 2-bộ để sử dụng làm lựa chọn cho trường này.

birth_day = forms.ChoiceField(choices=((str(x), x) for x in range(1,32))) 
+1

Hoạt động, có vẻ như tôi cần phải cẩn thận khi đọc. Giải pháp có thêm một dấu ngoặc đơn bên trái cần được loại bỏ. – deadghost

+0

Vì vậy, nó –

+0

@ IgnacioVazquez-Abrams: là có bất kỳ lý do tại sao bạn sử dụng máy phát điện thay vì danh sách hoặc tuple? http://stackoverflow.com/questions/16940293/why-is-there-no-tuple-comprehension-in-python – noisy

0

Bạn cần 2 bộ nhớ. Sử dụng chức năng tích hợp zip cho cùng 2 bộ dữ liệu

from django import forms 


class SignUpForm(forms.Form): 

    birth_day = models.IntegerField(choices=list(zip(range(1, 32), range(1, 32))), unique=True) 

Hãy nhớ (1,32) sẽ tạo từ 1 đến 31!

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