실험실 실험을 통해 otree "멀티 플레이어 의사 결정 전략 게임을 구현하기위한 장고 기반 프레임 워크"
otree의 양식에 대한 기본 사항
다음은 otree가 플레이어가 자신의 선택을보고하게하는 방법의 예입니다 (otree가 제공하는 템플릿의 일부인 "matching_pennies"게임을 기반으로 함).
이름이 지정된 파일 model.py
, 다음 코드를 찾습니다.
class Player(otree.models.BasePlayer):
[...]
penny_side = models.CharField(choices=['Heads', 'Tails'])
[...]
그런 다음 views.py
사람이 찾는다.
class Choice(Page):
form_model = models.Player
form_fields = ['penny_side']
마지막으로, 양식은 다음을 통해 최종 사용자에게 표시됩니다. choice.html
삽입하여
{% formfield player.penny_side with label="I choose:" %}
내가 무엇을하고 싶은지
플레이어가해야하는 선택의 수는 매개 변수에 따라 가변적 인 유연한 실험을 만듭니다. x
. 즉, 전체 프레임 워크가 생성되기를 원합니다. x
매개 변수 설정만으로 가능한 선택 가능 x
, 모든 파일을 수동으로 업데이트 할 필요가 없습니다. 이것은 우리가 실험 설계를 변경하고 내 실험 설계가 다른 사람들에게 유용하도록 코드를 만들면 내 인생을 더 쉽게 만들어 줄 것입니다. (어느 시점에서 Github에 공개 할 계획입니다).
두 개의 루프를 사용하는 것이 상당히 쉬워야하는 것처럼 보이지만, 주어진 방법으로 주어진 목록을 사용하는 데 문제가 있습니다. otree
구조화되어 있습니다.
내가 이해하는 것으로부터, 나는 단지 하나만 본다. 매우 고약한 선택의 수를 매개 변수에 의존하는 방법 x
. 먼저 각 선택 사항마다 다른 이름을 지정합니다. model.py
예를 들어
class Player(otree.models.BasePlayer):
[...]
for i in range(x):
exec("""choice%d = models.IntegerField(
choices= ['Heads','Tails'])""" %i)
[...]
그 다음에 모든 선택의 이름을 view.py
예를 들어
class Choice(Page):
all_forms = list()
for i in range(x):
all_forms.append('choice%d' %i)
form_model = models.Player
form_fields = all_forms
마지막으로 Choice.html의 모든 양식을 반복하는 방법을 찾으십시오. 뭔가 (아래 코드가 작동하지 않는다는 것을 알고, 단지 그 요지를 제공)
{% for p in range(x) %}
{% formfield player.choice{{p}} with label="I choose:" %}
{% endfor %}
내 질문은 :
- 이것은 매우 더럽고 지나치게 복잡해 보입니다. 이런 종류의 미친 명명 과정을 피하기 위해 목록이 만들어졌습니다. 목록으로이 작업을 대신 수행하는 방법을 알고 있습니까?
- 그것이 나무를 해킹하고 매개 변수에 따라 선택의 수를 결정하는 유일한 방법 인 경우
x
, 그러면 그렇게 해. 그러나 나는 장고에서 루프를 통해 원하는 폼 세트를 생성하는 방법을 아직 이해할 수 없다. (분명히 위의 예제는 여러 가지 이유로 작동하지 않는다.).