Django测试失败的无效关键字参数

时间:2012-10-31 22:55:41

标签: django django-models django-testing

我有这样的models.py:

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

1 个答案:

答案 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
)

在旁注中,将ModelModel命名为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

在跳转到库代码之前,您可以合理地预计它不会出错。

相关问题