1

我有一个这样的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
4

1 回答 1

3

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似乎暗示着,是一个坏主意Modelfrom tool.models import Module, Model, Product


另一方面,回溯通常提供关于错误发生位置的非常有用的信息。在这里,您可以看到回溯表明错误发生在:

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

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

于 2012-10-31T22:58:06.283 回答