#django #apache-flex #django-nonrel #pyamf
#django #apache-flex #django-nonrel #pyamf
Вопрос:
Я могу возвращать модели django, которые имеют только поля символов / даты / целые числа, но теперь я пытаюсь вернуть модели, которые имеют свойства ForeignKey, и я получаю эту ошибку в Flex в моем обработчике событий NetStatusEvent.NET_STATUS onError:
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
Итак, похоже, что существует некоторая проблема с возвратом модели Django с моделями foreginkey в качестве свойств? Я делаю что-то не так?
Ответ №1:
В процессе устранения я обнаружил, что проблема была вызвана объектом User в ChallengeAct, и я получил неоднозначную ошибку 500, чтобы устранить ее, установив для объекта user значение None после сохранения и непосредственно перед возвратом.
@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
Я хотел бы услышать, почему это произошло. У кого-нибудь есть идеи?
—обновление — я обнаружил, что могу увидеть, какова фактическая ошибка 500, просмотрев журнал терминала после выполнения моей команды runserver. Таким образом, фактическая ошибка была:
Could not import "cpyamf.amf3": Disallowed C-extension or built-in module
Я не уверен, что это такое, или почему я получаю это только при попытке включить объект user в возвращаемый результат, но пока я могу просто не включать объект user, чтобы избежать ошибки.