2012-10-31 23 views
0

我有一個models.py像這樣:Django的測試失敗無效關鍵字參數

from django.db import models 
from django.contrib.auth.models import User 
from datetime import datetime 


class UserProfile(models.Model): 
    user = models.OneToOneField(User) 

    def __unicode__(self): 
     return self.user.username 


class Project(models.Model): 
    user = models.ForeignKey(UserProfile) 
    created = models.DateTimeField(auto_now_add=True) 
    updated = models.DateTimeField(auto_now=True) 
    product = models.ForeignKey('tool.product') 
    module = models.ForeignKey('tool.module') 
    model = models.ForeignKey('tool.model') 
    zipcode = models.IntegerField(max_length=5) 

    def __unicode__(self): 
     return unicode(self.id) 

而且我tests.py:

from django.test import TestCase, Client 
# --- import app models 
from django.contrib.auth.models import User 
from tool.models import Module, Model, Product 
from user_profile.models import Project, UserProfile 


# --- unit tests --- # 
class UserProjectTests(TestCase): 

    fixtures = ['admin_user.json'] 

    def setUp(self): 
     self.product1 = Product.objects.create(
      name='bar', 
     ) 
     self.module1 = Module.objects.create(
      name='foo', 
      enable=True 
     ) 
     self.model1 = Model.objects.create(
      module=self.module1, 
      name='baz', 
      enable=True 
     ) 
     self.user1 = User.objects.get(pk=1) 

    ... 

    def test_can_create_project(self): 
     self.project1 = Model.objects.create(
      user=self.user1, 
      product=self.product1, 
      module=self.module1, 
      model=self.model1, 
      zipcode=90210 
     ) 

     self.assertEquals(self.project1.zipcode, 90210) 

但我得到一個TypeError: 'product' is an invalid keyword argument for this function錯誤。

我不知道什麼是失敗,但我猜的東西做的FK關係...

任何幫助將非常感激。

編輯: 完整回溯:

ERROR: test_can_create_project (user_profile.tests.UserProjectTests) 
---------------------------------------------------------------------- 
Traceback (most recent call last): 
    File "/home/sam/Dropbox/django-projects/unirac/user_profile/tests.py", line 52, in test_can_create_project 
    zipcode=90210 
    File "/home/sam/.envs/unirac/local/lib/python2.7/site-packages/django/db/models/manager.py", line 137, in create 
    return self.get_query_set().create(**kwargs) 
    File "/home/sam/.envs/unirac/local/lib/python2.7/site-packages/django/db/models/query.py", line 375, in create 
    obj = self.model(**kwargs) 
    File "/home/sam/.envs/unirac/local/lib/python2.7/site-packages/django/db/models/base.py", line 367, in __init__ 
    raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0]) 
TypeError: 'product' is an invalid keyword argument for this function 
+0

你可以請發佈完整的追溯? (你粘貼錯誤之前的行) –

回答

2

Model.objects.create( ...應該有可能是Project.objects.create(

在:

self.project1 = Model.objects.create(
    user=self.user1, 
    product=self.product1, 
    module=self.module1, 
    model=self.model1, 
    zipcode=90210 
) 

在一個旁註,命名ÿ我們的Model,Model,作爲from tool.models import Module, Model, Product似乎暗示,是壞主意


在另一個旁註,回溯通常提供非常有用的信息作爲對發生錯誤的位置。在這裏,你可以看到追溯表示發生錯誤:

File "/home/sam/Dropbox/django-projects/unirac/user_profile/tests.py", line 52, in test_can_create_project 

跳轉到庫中的代碼,你可以合理地期望並不車前。

+0

嘿,感謝您的幫助!是的'模型'應該是'項目',這導致我更多的問題。 self.user1實際上應該是一個'UserProfile'對象。但現在它起作用了!再次感謝。 –

+0

...是的。我想我應該重命名Model對象,儘管這是描述客戶端的產品。 –

相關問題