2012-07-25 45 views
6

Tôi đang cố thêm trường tùy chỉnh vào dự án Django của mình sử dụng South. Bởi vì điều này, tôi đang cố gắng (lần đầu tiên) viết introspection rules for South. Tôi tin rằng trường hợp của tôi là đơn giản nhất có thể vì tôi chỉ đơn giản là mở rộng một CharField. Cụ thể:Thêm trường tùy chỉnh đơn giản vào Django - Cách viết quy tắc nội tại phía nam

class ColorField(models.CharField): 
    def __init__(self, *args, **kwargs): 
     kwargs['max_length'] = 10 
     super(ColorField, self).__init__(*args, **kwargs) 

    def formfield(self, **kwargs): 
     kwargs['widget'] = ColorPickerWidget 
     return super(ColorField, self).formfield(**kwargs) 

Đây là đoạn mã Django được gọi là jQuery color picker model field cho những người quan tâm.

Kể từ khi tôi không thêm bất kỳ thuộc tính mới, tôi tin rằng tôi chỉ cần thêm những dòng mã:

from south.modelsinspector import add_introspection_rules 
add_introspection_rules([], ["^myproject\.myapp\.models\.ColorField"]) 

Nó có lẽ là hiển nhiên, nhưng nơi họ nên đi đâu? Ngoài ra, là giả định của tôi rằng đây là tất cả tôi phải làm đúng?

Tôi đã xem xét một số câu hỏi được đăng ở đây, nhưng hầu hết đều giải quyết được nhiều vấn đề phức tạp hơn.

Mỗi http://south.readthedocs.org/en/latest/customfields.html#where-to-put-the-code, tôi đã thử puttin mã ở đầu tệp models.py của tôi nơi trường tùy chỉnh được xác định. Nhưng điều này đã không làm việc.

Trả lời

7

Câu trả lời đơn giản: có, mã phải đi trong tệp models.py nơi trường được xác định. Mã đúng là:

from south.modelsinspector import add_introspection_rules 
add_introspection_rules([], ["^myapp\.models\.ColorField"]) 

Không chắc chắn lý do tôi đặt tên dự án vào đó.

1

Bạn phải đảm bảo rằng đường dẫn đến tệp là chính xác. Cái bạn đề cập trông giống như hình tôi đang sử dụng, nhưng đường dẫn là:

add_introspection_rules([], ["^colors\.fields\.ColorField"]) 
Các vấn đề liên quan