0

CharFields / Dates / Integersのみを持つdjangoモデルを返すことはできますが、ForeignKeyプロパティを持つモデルを返そうとすると、FlexのNetStatusEvent.NET_STATUSonErrorイベントハンドラーでこのエラーが発生します。

m_info  Object (@16491fe9)  
code    "NetConnection.Call.Failed" 
description "HTTP: Status 500"  
details "http://127.0.0.1:8000/gateway/"    
level   "error" 

これがmodels.pyで重要なモデルです。

class RewardActBase(models.Model):
    user = models.ForeignKey(User)
    start_date = models.DateTimeField(blank=True, null=True)
    progress_value = models.IntegerField(default=0)
    coupon_act = models.ForeignKey(CouponAct)

    class Meta:
        abstract = True


class ChallengeAct(RewardActBase):
    challenge = models.ForeignKey(Challenge)

    def __unicode__(self):
        return self.challenge.title'

class CouponAct(models.Model):
    coupon = models.ForeignKey(Coupon)
    earned_date = models.DateTimeField(blank=True, null=True)
    redeemed_date = models.DateTimeField(blank=True, null=True)
    expiration_date = models.DateTimeField(blank=True, null=True)

    def __unicode__(self):
        return self.coupon.title

次に、pyamfを介してこれらのオブジェクトを取得する場合、これは私が使用しているメソッドであり、上記のエラーが発生します。

@login_required
def get_challenge_act(http_request, location_id):
    user = http_request.user

    c = ChallengeAct();
    c.challenge = Challenge.objects.select_related().get(id=1)
    c.start_date = datetime.now()
    c.progress_value = 1
    c.user = user
    new_coupon_act = CouponAct()
    new_coupon_act.coupon = Coupon.objects.select_related().get(id=c.challenge.coupon.id)
    new_coupon_act.earned_date = datetime.now()
    new_coupon_act.save()
    c.coupon_act = new_coupon_act
    c.save()

    return c

興味深いのは、get_challenge_actメソッドを変更してChallengeActオブジェクトのプロパティを返す場合、エラーが発生しないことです。したがって、ChallengeActに属するプロパティまたはオブジェクトを返すことはできますが、ChallengeAct自体を返すことはできません。たとえば、次のコードはエラーなしでチャレンジオブジェクトを返します。

    return c.challenge

では、プロパティとしてforeginkeyモデルを含むDjangoモデルを返すのに問題があるように見えますか?私は何か間違ったことをしていますか?

4

1 に答える 1

0

排除のプロセスにより、問題を引き起こしているのは ChallengeAct の User オブジェクトであることがわかりました。保存後、戻る直前にユーザー オブジェクトを None に設定することで、あいまいな 500 エラーが解消されました。

@login_required
def get_challenge_act(http_request, location_id):
user = http_request.user

c = ChallengeAct();
c.challenge = Challenge.objects.select_related().get(id=1)
c.start_date = datetime.now()
c.progress_value = 1
c.user = user
new_coupon_act = CouponAct()
new_coupon_act.coupon = Coupon.objects.select_related().get(id=c.challenge.coupon.id)
new_coupon_act.earned_date = datetime.now()
new_coupon_act.save()
c.coupon_act = new_coupon_act
c.save()
c.user = None

return c

なぜそれが起こったのか聞いてみたいです。誰にもアイデアはありますか?

--update-- runserver コマンドを実行した後、ターミナル ログを調べると、実際の 500 エラーが何であるかを確認できることがわかりました。したがって、実際のエラーは次のとおりです。

Could not import "cpyamf.amf3": Disallowed C-extension or built-in module

それが何であるか、または戻り結果にユーザーオブジェクトを含めようとしたときにのみ取得する理由はわかりませんが、今のところ、エラーを回避するためにユーザーオブジェクトを含めることはできません。

于 2011-10-31T20:25:04.903 に答える