django-stdfields là một ứng dụng Django cung cấp các lĩnh vực mong muốn tác giả là tiêu chuẩn trong Django & nbsp;. Tại thời điểm này được giới hạn ở những MinutesField, EnumIntegerField và EnumCharField.
Nội dung
- Stdfields.forms.MinutesField: sử dụng một số nguyên đại diện cho một khoảng thời gian phút và giờ
- Stdfields.fields.EnumIntegerField: làm cho làm việc với sự lựa chọn một chút dễ dàng hơn
- Stdfields.fields.EnumCharField: tương tự, nhưng đối với sự lựa chọn với một chìa khóa char
MinutesField
Là một phần mở rộng của django.forms.IntegerField chuẩn của Django.
Trường này sẽ chấp nhận các giá trị trong một thời gian trong vài phút trong hh định dạng: mm hoặc h.fraction, tương tự như cách Basecamp cho phép bạn xác định thời gian của bạn dành cho một nhiệm vụ hoặc là 08:30 hoặc 8.5. Trong trường hợp sau chỉ 8,25, 8,5, 8,50 và 8,75 được coi là yếu tố đầu vào hợp lệ.
Ví dụ
Hành động mạnh hơn lời nói:
# Models.py
class Task (models.Model):
& Nbsp; time_spent = models.IntegerField ()
# Forms.py
từ stdfields.forms nhập MinutesField
từ các mô hình nhập khẩu công tác
lớp TaskForm (forms.ModelForm):
& Nbsp; time_spent = MinutesField (label = '? Đã làm nó mất bao lâu')
& Nbsp; class Meta:
& Nbsp; mô hình = Nhiệm vụ
Bạn có thể sử dụng các bộ lọc phút template từ stdfieldstags để render một trường như vậy trong các định dạng 08:30:
{% Tải stdfieldstags%}
Nó đã cho tôi {{task.time_spent | phút}} để hoàn thành nhiệm vụ này.
Enumeration
Tôi luôn luôn kết thúc với mã xấu xí khi sử dụng lựa chọn tham số của Django cho các lĩnh vực. Với lớp stdfields.models.Enumeration, tôi đã có một lớp cơ sở thuận tiện cho phép tôi để giữ cho mọi thứ gọn gàng:
# Models.py
lớp Color (Enumeration):
& Nbsp; RED = 'R'
& Nbsp; xanh = 'G'
& Nbsp; Blue = 'B'
& Nbsp;classmethod
& Nbsp; def tất cả (cls):
& Nbsp; return [
& Nbsp; (cls.RED, _ (u'Red ')),
& Nbsp; (cls.GREEN, _ (u'Green ')),
& Nbsp; (cls.BLUE, _ (u'Blue '))
& Nbsp;]
lớp Pencil (models.Model):
& Nbsp; color = models.CharField (lựa chọn = Color.all (), max_length = Color.max_length ())
# Views.py
red_pencils def (yêu cầu):
& Nbsp; bút chì = Pencil.objects.filter (color = Color.RED)
& Nbsp; ...
& Nbsp; # Prints "Hiện các bút chì đỏ '
& Nbsp; logging.info ('Đang% s bút chì'% (Color.as_display (Color.RED)))
EnumCharField và EnumIntegerField
Và bây giờ chúng tôi có thể làm việc với một Enumeration dễ dàng hơn với các mô hình cánh đồng EnumCharField và EnumIntegerField:
# Models.py
lớp Color (Enumeration):
& Nbsp; # tương tự như trên
lớp Pencil (models.Model):
& Nbsp; color = models.EnumCharField (enum = Color, max_length = Color.max_length ())
Ví dụ này là về cơ bản giống như trên kể từ khi EnumCharField là một lớp con của thường Django CharField. Bằng cách sử dụng các tham số từ khóa enum trong lĩnh vực enum, các lựa chọn sẽ được tự động cập nhật khi bạn cập nhật các đối tượng điều tra. Và kể từ khi bạn đang sử dụng cung cấp phương pháp max_length của Enumeration, các max_length sẽ được cập nhật khi cần thiết. Cũng giống như trong ví dụ trước. Các lĩnh vực enum đơn giản là cung cấp một số rõ ràng hơn khi đọc các mã.
EnumIntegerField hoạt động chính xác như nhau, nhưng đối với kiểu liệt kê với các phím số nguyên. . Cả hai lĩnh vực có thể được sử dụng với Nam
Yêu cầu :
- Python
- Django
Bình luận không