2013-03-10 30 views
5

Tôi cần chỉ có thể viết năm, hoặc năm và tháng (ngoài các giá trị trọn gói chuẩn chuẩn) trong một số trường ngày giờ của tôi. Giống như các mẫu dưới đây.Django - Cần các trường ngày giờ có thể chỉ xử lý các giá trị năm, hoặc năm và tháng

YYYY 
YYYY-MM 
YYYY-MM-DD 
YYYY-MM-DD HH 
YYYY-MM-DD HH:MM 
YYYY-MM-DD HH:MM:SS 

Trong mySQL này có thể dễ dàng được thực hiện bằng cách sử dụng zero, nhưng điều đó không làm việc DOS trong django. Đó là hàm python time.datetime ngu ngốc mà dos không hỗ trợ nó.

Có cách nào dễ dàng để thực hiện việc này trong django không? Nếu không, có một số phần mở rộng có thể làm điều này cho tôi không? Nếu không, làm cách nào để giải quyết vấn đề này theo cách tốt nhất có thể?

Tôi sẽ rất tuyệt nếu có thể xử lý bình thường hóa nội dung thời gian địa phương nếu đó là giá trị thời gian dữ liệu đầy đủ. Bằng cách đó tôi có thể sử dụng cùng một lĩnh vực ở khắp mọi nơi. Nhưng nó không phải là siêu quan trọng.

Trả lời

7

Có lẽ điều này sẽ giúp:

DayMonthField và YearField

django-yearlessdate - https://github.com/seddonym/django-yearlessdate

YearMonthField

YEARMONTH_INPUT_FORMATS = (
    '%Y-%m', '%m/%Y', '%m/%y', # '2006-10', '10/2006', '10/06' 
) 

class YearMonthField(CharField): 
    default_error_messages = { 
     'invalid': _('Enter a valid year and month.'), 
    } 

    def __init__(self, input_formats=None, *args, **kwargs): 
     super(YearMonthField, self).__init__(*args, **kwargs) 
     self.input_formats = input_formats 

    def clean(self, value): 
     if value in validators.EMPTY_VALUES: 
      return None 
     if isinstance(value, datetime.datetime): 
      return format(value, '%Y-%m') 
     if isinstance(value, datetime.date): 
      return format(value, '%Y-%m') 
     for fmt in self.input_formats or YEARMONTH_INPUT_FORMATS: 
      try: 
       date = datetime.date(*time.strptime(value, fmt)[:3]) 
       return format(date, '%Y-%m') 
      except ValueError: 
       continue 
     raise ValidationError(self.error_messages['invalid']) 

class MyModel(models.Model): 
    yearmonth = YearMonthField() 
+1

nếu bạn có câu hỏi, tôi sẽ trả lời vào ngày mai. Cần ngủ – catherine

+0

Xin chào! Khi tôi thực hiện điều này nó cho thấy tôi '(fields.E120) CharFields phải xác định một thuộc tính 'max_length'. Bất kỳ đề xuất? –

+0

@Abhishek Bhatia bạn cần đặt max_length = 100 (hoặc bất kỳ số nào) cho mỗi CharField. Django yêu cầu bạn sử dụng tham số này, như sau: var = model.CharField (max_length = 100) – MrVocabulary

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