1

tornadowebに沿ってDjangoを使用しているこの関数を検討してください

def MeetingRecord(userid,mtngid,mesg):
    obj =  Usage()
    obj.name = userid
    obj.meeting_id = mtngid
    obj.action = mesg
  #  obj.participantid = participantid
    obj.save()    

こちらがモデルです

class Usage(models.Model):
    user = models.ForeignKey('User',related_name = 'usage_user',null = True)
    meeting = models.ForeignKey('Meeting',related_name = 'meeting_usages',null = True)
    participant= models.ForeignKey('Participant',related_name = 'meeting_participant_id',null = True)
    date = models.DateTimeField(auto_now  = True)
    action = models.CharField(max_length = 500)
    miscellaneous = models.CharField(max_length = 500)

私はこのメソッドを次のような竜巻クラスから呼び出しています

MeetingRecord(check_user_exist,mtng,mesg)

しかし、私は次のトラックバックを得ています

Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tornado-2.3-py2.7.egg/tornado/web.py", line 1021, in _execute
    getattr(self, self.request.method.lower())(*args, **kwargs)
  File "tornado_main.py", line 383, in post
    MeetingRecord(check_user_exist,mtng,mesg)
  File "tornado_main.py", line 503, in MeetingRecord
    obj.save()
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 463, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/base.py", line 551, in save_base
    result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/manager.py", line 203, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/query.py", line 1576, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/sql/compiler.py", line 909, in execute_sql
    for sql, params in self.as_sql():
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/sql/compiler.py", line 872, in as_sql
    for obj in self.query.objs
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/fields/related.py", line 964, in get_db_prep_save
    connection=connection)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/fields/__init__.py", line 292, in get_db_prep_save
    prepared=False)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/fields/__init__.py", line 284, in get_db_prep_value
    value = self.get_prep_value(value)
  File "/usr/local/lib/python2.7/dist-packages/Django-1.4-py2.7.egg/django/db/models/fields/__init__.py", line 537, in get_prep_value
    return int(value)
TypeError: int() argument must be a string or a number, not 'Meeting'

useridがUserクラスのインスタンスであり、mtngidが会議クラスのインスタンスであることを確認したいと思います。

このエラーが発生する理由を教えてください。

4

3 に答える 3

2

知識に基づいた推測:「obj.meeting_id = mtngid」ここでは、おそらく会議IDではなく会議インスタンスを渡しています。

于 2012-07-18T11:46:57.723 に答える
0

会議は外部キーであり、実際の参照ではなく、オブジェクトを期待します。meeting_idまた、フィールドがありません。

これを試して:

def MeetingRecord(userid,mtngid,mesg):
    obj =  Usage()
    obj.name = userid
    obj.meeting = mtngid
    obj.action = mesg
  #  obj.participantid = participantid
    obj.save()

また、メソッドの引数にも適切な名前を付ける必要があります。

于 2012-07-18T11:22:06.343 に答える
-1

obj.meeting_idMeetingのIDフィールド(AutoField )の外部キーを使用しました。AutoFieldはIntegerFieldです。これが、エラーメッセージがint()引数について示している理由です。あなたの場合、あなたはを使わなければなりませんobj.meeting_id = mtngid.id。Burhanのオブジェクト参照の方法はより明確です。mtngidの名前をmtngに変更することをお勧めします。これは、idではなくオブジェクトであるためです。

于 2012-07-18T12:25:32.330 に答える