0

私は次のようなモデルを持っています:

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

class Skill(models.Model):
    title = models.CharField(max_length=255)

    def __unicode__(self):
        return self.title


class UserSkills(models.Model):
    user = models.ForeignKey(User)
    skill = models.ForeignKey(Skill)

    def __unicode__(self):
        return '%s | %s' % (self.user, self.skill)

私がこれをしようとすると:

>>> u = User.objects.get(username='myuser')
>>> s, created = Skill.objects.get_or_create(title='mysql')
>>> type(u)
<class 'django.contrib.auth.models.User'>
>>> type(s)
<class 'django_myapp.models.Skill'>

>>> userskill, created = UserSkills.objects.get_or_create(skill=s, user=u)
TypeError: 'skill' is an invalid keyword argument for this function

ここで何が間違っていますか?

余談ですが、私のUserSkillsモデルは余分かもしれないと感じています。それは単にモデルのManyToManyフィールドでSkillある必要がありUserますか?

編集

トレースバック:

Traceback (most recent call last):
File "<console>", line 1, in <module>
File "/home/sam/.envs/rs-open-auth/local/lib/python2.7/site-packages/django/db/models/manager.py", line 149, in create
return self.get_query_set().create(**kwargs)
File "/home/sam/.envs/rs-open-auth/local/lib/python2.7/site-packages/django/db/models/query.py", line 414, in create
obj = self.model(**kwargs)
File "/home/sam/.envs/rs-open-auth/local/lib/python2.7/site-packages/django/db/models/base.py", line 415, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % list(kwargs)[0])
4

1 に答える 1

0

電話すると:

userskill, created = UserSkills.objects.get_or_create(skill=s, user=u)

「s」は、以前は「mysql」として定義されていました (「s」は文字列です)。ただし、「skill」の外部キーを持つ新しいモデル レコードを作成する場合、「skill」は主キー (つまり、1、2 など) である必要があります。主キーを直接呼び出すことでこれを行うことができます (たとえば、作成した「スキル」がスキルのモデルの最初のスキルである場合:

userskill, created = UserSkills.objects.get_or_create(skill=1, user=u)

または、「s」の主キーを呼び出して、新しい UserSkills インスタンスを作成できます。

userskill, created = UserSkills.objects.get_or_create(skill=s.pk, user=u)
于 2013-10-04T17:40:31.853 に答える