2011-09-03 11 views
1

내 Django 모델 필드와 위젯을 사용하여 내 관리자에게 GoogleMap 위젯을 렌더링하고 있으며, 프로젝트 마이그레이션에서 South를 사용하여 데이터베이스 마이그레이션을 처리하려고합니다. 그러나 많은 노력을 다한 후에 나는 사용자 정의 사우스 규칙을 생성 할 수 없다. 이것은 나의 커스텀 모델이고 내가 시도한 많은 instrospection 규칙 중 마지막이다.Django South가 내 사용자 정의 규칙을 무시합니다.

class GoogleMapMarkerField(models.CharField): 
    __metaclass__ = models.SubfieldBase 
    description = _('Un marcador de Google Maps') 
    widget = GoogleMapMarkerWidget 

    def __init__(self, center, *args, **kwargs): 
     kwargs['max_length'] = 100 
     kwargs['help_text'] = _('Arrastre el cursor en el mapa para seleccionar el punto') 
     self.center = center 

     super(GoogleMapMarkerField, self).__init__(*args, **kwargs) 

    def formfield(self, **kwargs): 
     defaults = { 
      'center': self.center, 
      'form_class':GoogleMapMarkerFormField 
     } 
     defaults.update(kwargs) 
     return super(GoogleMapMarkerField, self).formfield(**defaults) 

    def to_python(self, value): 
     if isinstance(value, GoogleMapMarker): 
      return value 
     if isinstance(value, list): 
      return GoogleMapMarker(*map(float, value)) 

     elif isinstance(value, basestring): 
      try: 
       return GoogleMapMarker(*map(float, value.split(','))) 
      except ValueError: 
       pass 

    def get_prep_value(self, value): 
     return '%f,%f' % (value.latitude, value.longitude) 


add_introspection_rules([ 
      (
       (GoogleMapMarkerField,), 
      [], 
      { 
       'center': ('center', {}), 
      } 
      ) 

    ], ["^website\.fields\.GoogleMapMarkerField"]) 

는 그리고 이것은 그것이 위치 인수입니다, 내가

Traceback (most recent call last): 
    File "manage.py", line 14, in <module> 
    execute_manager(settings) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 438, in execute_manager 
    utility.execute() 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/django/core/management/__init__.py", line 379, in execute 
    self.fetch_command(subcommand).run_from_argv(self.argv) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/django/core/management/base.py", line 191, in run_from_argv 
    self.execute(*args, **options.__dict__) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/django/core/management/base.py", line 220, in execute 
    output = self.handle(*args, **options) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/management/commands/schemamigration.py", line 97, in handle 
    old_orm = last_migration.orm(), 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/utils.py", line 62, in method 
    value = function(self) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/migration/base.py", line 422, in orm 
    return FakeORM(self.migration_class(), self.app_label()) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/orm.py", line 46, in FakeORM 
    _orm_cache[args] = _FakeORM(*args) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/orm.py", line 125, in __init__ 
    self.models[name] = self.make_model(app_label, model_name, data) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/orm.py", line 321, in make_model 
    field = self.eval_in_context(code, app, extra_imports) 
    File "/home/armonge/workspace/env/lib/python2.7/site-packages/south/orm.py", line 236, in eval_in_context 
    return eval(code, globals(), fake_locals) 
    File "<string>", line 1, in <module> 
TypeError: __init__() takes at least 2 arguments (1 given) 

답변

1

center 받고 있어요 역 추적을하지 않습니다 키워드 인수입니다. 당신은 남쪽에 대해 입장적인 주장을 사용해서는 안되며, 그것을 이해하지 못합니다. (Custom Fields: Keyword Arguments 참조). 센터에 기본값 (center=None)을 제공하고 __init__에 전달 된 키워드 이름을 정의하는 링크에서 예제 코드를 따라 가면 데이터베이스에 저장된 이름과 옵션 사전 (빈칸 일 수 있지만 기본값을 설정하면 도움이됩니다.)

관련 문제