0

次のような on success を持つ Y.io コマンドを介してサーバーの応答を保存します。

on: {
    success: function (requestId, response){
        sess_id = parseInt(response.responseText);
            buildtable();
    }               
}

buildtable() は、シミュレートされたデータを作成し、sess_id 変数を使用して session というラベルの付いた列に入力します。このようにして、シミュレートされたすべてのデータ読み取りがセッションに関連付けられます。これら 2 つのテーブルのモデルは次のようになります。

class session(models.Model):
    start_time = models.IntegerField()
    end_time = models.IntegerField(null=True)

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

class meterdata(models.Model):
    time_elapsed = models.FloatField()
    volts = models.FloatField()
    amps = models.FloatField()
    kW = models.FloatField()
    kWh = models.FloatField()
    session = models.ForeignKey(session)

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

シミュレートされたデータを meterdata テーブルに保存しようとすると、次のエラーが発生します。

Cannot assign "5.0": "meterdata.session" must be a "session" instance

文字列、int、および float として挿入しようとしました。また、セッション テーブルに実際に作成されたセッションがあることも確信しています。この番号がセッション テーブル内の ID の 1 つを参照していることをコードが確実に理解するにはどうすればよいですか?

edit : 保存しようとしたときに呼び出されるビューは次のとおりです

@csrf_exempt
def save(request):
    if request.method == 'POST':
        rawdata1 = request.body
        rawdata2 = json.loads(rawdata1)
        for data in rawdata2:
            x = meterdata(time_elapsed = data['time_elapsed'], volts = data['volts'], amps = data['amps'], kW = data['kW'], kWh = data['kWh'], session = data['session'])
            x.save()        
        return HttpResponse(rawdata2)
4

1 に答える 1

1

あなたが入れた値はセッションIDだと思います。それがシステムがあなたに言っている理由ですCannot assign "5.0": "meterdata.session" must be a "session" instance. この問題が発生した場合は、変数をinstance追加idして、このように値を等しくしますsession_id

他の解決策では、そのinstanceエラーが発生しないように、ID を使用しないでください。

元。

<select>
   {% for session in sessions %}
   <option value="{{ session }}">{{ session }}</option>
   {% endfor %}
</select>

お気づきのとおり、私は session.id を使用せず、代わりに を使用していますsession only。これがインスタンスと非インスタンスの違いです。

于 2013-07-11T02:11:39.973 に答える