2016-01-06 51 views
2

加載數據我有以下型號和經理。下面錯誤而從夾具

[ 
    { 
     "model": "parties.state", 
     "fields": { 
      "name": "Andaman and Nicobar", 
      "code": "AN", 
      "country": "India" 
     } 
    }, 
    { 
     "model": "parties.state", 
     "fields": { 
      "name": "Andhra Pradesh", 
      "code": "AP", 
      "country": "India" 
     } 
    }, 
] 

我早甩數據到一個固定的文件

class StateManager(models.Manager): 
    def get_by_natural_key(self, name): 
     return self.get(name=name) 


class State(models.Model): 

    class Meta: 
     verbose_name = "State" 
     verbose_name_plural = "States" 
     permissions = (
      ('access_state', 'Can access States'), 
     ) 

    COUNTRIES = (
     ('India', 'India'), 
     ('USA', 'USA'), 
     ('Thailand', 'Thailand'), 
    ) 

    # Managers 
    objects = StateManager() 

    # Database fields 
    name = models.CharField(
     'Name', 
     max_length=100, 
     unique=True, 
     help_text=''' 
     100 chars max 
     ''' 
    ) 
    code = models.CharField(
     'Code', 
     max_length=10, 
     unique=True, 
     help_text=''' 
     10 chars max 
     ''', 
     null=True, blank=True 
    ) 
    country = models.CharField(
     max_length=50, 
     default="India", 
     choices=COUNTRIES, 
     blank=False, 
     null=False 
    ) 

    def __str__(self): 
     return self.name 

    def natural_key(self): 
     return self.name 

我fixture文件中給出。但是,當我試圖立即加載夾具上,我收到以下錯誤......

Traceback (most recent call last): 
..... 
..... 
    TypeError: get_by_natural_key() takes 2 positional arguments but 20 were given 
..... 
..... 

    File "/home/parijath/Projects/virtualenv/django18/lib/python3.4/site-packages/django/core/serializers/base.py", line 195, in build_instance 
    obj.pk = Model._default_manager.db_manager(db).get_by_natural_key(*natural_key).pk 
django.core.serializers.base.DeserializationError: Problem installing fixture '/home/parijath/Projects/django_projects/webportal18_multipleapps/parties/fixtures/states.json': get_by_natural_key() takes 2 positional arguments but 20 were given 

回答

2

natural_key方法應該返回一個元組,而不是一個字符串。

def natural_key(self): 
    return (self.name,) 

natural_key如果是一個字符串"Andaman and Nicobar"代替的元組('Andaman and Nicobar',)然後*natural_key將解包每個19個字符的字符串作爲單獨的參數英寸與self一起,您可以從錯誤消息中獲得20個參數。

+0

是的,但是我們這裏有不同的錯誤:'get_by_natural_key()接受但20人given' –

+0

@ArashHatami 2個位置參數爲什麼你認爲這是一個不同的錯誤? – Alasdair

+0

錯誤是關於取第二個變量的參數不返回值 –