2015-02-04 2 views
0

Django 1.7을 사용하여 마이그레이션을 작성했지만 일부 기사를 읽었지만 모델에서 countryname = 'MEXICO'와 같은 계층 구조를 사용하는 방법을 이해하지 못했으며 결과를 반환했습니다. MX 키,이 값으로 내가 테이블에 삽입 할 수 있습니다 내 짐작이다. 전 국가 = F의 [ 'PAIS를']를 사용하는 경우부모 클래스를 사용하는 Django 1.7 마이그레이션

def add_holder_data(apps, schema_editor): 
    table = 'PODER.DBF' 
    m = MigrationFromDBase() 
    fields = json.dumps(m.fetch_dbase_table(table)) 

    Holder = apps.get_model('holder', 'Holder') 
    data = [] 
    for f in json.loads(fields): 
     if int(f['NREFPOD']) > 0 and int(f['NREFPOD']) != None: 
     data.append(
      Holder(
       id=int(f['NREFPOD']), name =f['SOLICITA'], street = f['CALLE'], city = f['CIUDAD'], 
        cp = f['CODIGO'], country__name = f['PAIS'], nationality = f['NACION'], rfc = f['RFC'], 
        power = f['PODER_EN'], no_rgp = f['NORGP'], person_type = f['PERFISICA'], 
        national = f['NACIONAL'], compulsa = int(f['COMPULSA']) 
      ) 
     ) 
    Holder.objects.bulk_create(data) 


def remove_holder_data(apps, schema_editor): 
    Holder = apps.get_model('holder', 'Holder') 
    Holder.objects.all().delete() 


class Migration(migrations.Migration): 
    dependencies = [('holder','0001_initial')] 

    operations = [ 
    migrations.RunPython(
     add_holder_data, 
     reverse_code=remove_holder_data 
     ), 
    ] 

는 내게 오류를 줄 : 값이 너무 오래 입력 문자 F [ 'PAIS]는 전체 이름을 가지고 있기 때문에 (2) 그것의 변화. 클래스는 country.code 필드에 네 개의 문자가 있습니다.

country__name = f [ 'PAIS']를 사용하면 오류가 발생합니다. TypeError : 'country_name'은이 함수에 대한 키워드 인수가 잘못되었습니다.이 경우 오류 이유를 알 수 없습니다.

먼저 국가 코드가 필요합니까?.

class Holder(models.Model): 

    name = models.CharField(max_length=80, verbose_name=_('Nombre')) 
    street = models.CharField(max_length=70, blank=True,  verbose_name=_('Calle')) 
    city = models.CharField(max_length=70, blank=True, verbose_name=_('Ciudad')) 
    cp = models.CharField(max_length=10, blank=True, verbose_name=_('Código Postal')) 
    country = models.CharField(Country, max_length=50) 
    nationality = models.CharField(Nacionality, blank=True, max_length=50) 
    rfc = models.CharField(max_length=13, blank=True, verbose_name=_('RFC')) 

    def __str__(self): 
     return self.name 
+0

홀더 정의를 붙여 넣을 수 있습니까? 'Holder (..., country = Country (code = ..., name = f [ 'PAIS'])), ...)'작동합니까? – ZZY

답변

0

잘 뒤에 홀더

class Holder(models.Model): 

    name = models.CharField(max_length=100, verbose_name=_('Nombre')) 
    street = models.CharField(max_length=100, blank=True,  verbose_name=_('Calle')) 
    city = models.CharField(max_length=100, blank=True, verbose_name=_('Ciudad')) 
    cp = models.CharField(max_length=10, blank=True, verbose_name=_('Código Postal')) 
    country = models.ForeignKey(Country) 
    nationality = models.CharField(Nacionality, blank=True, max_length=50) 
    rfc = models.CharField(max_length=13, blank=True, verbose_name=_('RFC')) 

내 모델을 국가에서 데이터를 정리, 문제가 된 해결하고 변경하는 방법 :

class Country(models.Model): 
    code = models.CharField(max_length=4, verbose_name=_('Código')) 
    name = models.CharField(max_length=80, verbose_name=_('Nombre')) 

    def __str__(self): 
     return self.name 

는 홀더의 정의입니다 항상 다음과 같은 오류가 발생합니다. 클래스 Country 객체 여야하고 객체를 인쇄 할 때 __fake__.Holder object을 사용하여 apps.get_model('app', 'class')을 사용하지만 가져온 경우에는 clas를 가져옵니다. s로 from holder import Holder holder.Holder object 인쇄, 그래서 둘 다 올바른 국가 모델 개체를 retrive 개체의 동일한 유형이 될 것이라고 생각하고 이것이 내 이식 클래스입니다.

from addons.utility import MigrationFromDBase 
import simplejson as json 

from addons.tools import CapitalizeMultiplesWords, CleanEmptySpaceInWords, CleanUnicode, UniqueJson 

def discover_country(instance, country): 
    """ 
    Cleaned the string to get the country city 
    :param country: is a country from dbase and it contains no normalized data 
    :return: Country Object 
    """ 
    obj = instance 
    if country.find('_n_') != -1: 
     _clean_country = CleanEmptySpaceInWords(str(CapitalizeMultiplesWords(country))) 
    else: 
     _clean_country = CleanUnicode(str(CleanEmptySpaceInWords(str(CapitalizeMultiplesWords(country))))) 
    try: 
     _country = obj.objects.get(name = _clean_country) 
    except obj.DoesNotExist: 
     _country = obj.objects.get(name = 'unknown') 
    return _country 



def add_holder_data(apps, schema_editor): 
    table = 'TABLE.DBF' 
    m = MigrationFromDBase() 
    fields = json.dumps(m.fetch_dbase_table(table)) 

    holder_instance = apps.get_model('holder', 'Holder') 
    country_instance = apps.get_model('addons', 'Country') 


    for f in UniqueJson(json.loads(fields), 'NREFPOD'): 
     if int(f['NREFPOD']) > 0 and int(f['NREFPOD']) != None: 

      if f['SOLICITA'].strip() == "" : 
       f['SOLICITA'] = 'unknown' 
      if f['PERFISICA'].strip() == "": 
       f['PERFISICA'] = '' 
      if f['NACIONAL'].strip() == "": 
       f['NACIONAL'] = '' 
      _country = discover_country(country_instance, f['PAIS']) 
      holder_instance.objects.get_or_create (
       id=int(f['NREFPOD']), name = f['SOLICITA'], street = f['CALLE'], city = f['CIUDAD'], 
        cp = f['CODIGO'], country = _country, rfc = f['RFC'], 
        power = f['PODER_EN'], no_rgp = f['NORGP'], person_type = f['PERFISICA'], 
        national = f['NACIONAL'], compulsa = int(f['COMPULSA']) 
      ) 


def remove_holder_data(apps, schema_editor): 
    Holder = apps.get_model('holder', 'Holder') 
    Holder.objects.all().delete() 


class Migration(migrations.Migration): 
    dependencies = [('holder','0001_initial')] 

    operations = [ 
     migrations.RunPython(
     add_holder_data, 
     reverse_code=remove_holder_data 
     ), 
    ] 
관련 문제