私は次のモデルを持っています:オブジェクトC、オブジェクトBに含まれ、オブジェクトAに含まれています
テンプレートに動的フォームがあり、jQuery関数を使用して、このフォームにいくつかのフィールドを動的に追加できます。フィールドの各グループはオブジェクト(BまたはC)を表します。
ポストアクションで送信されたら、オブジェクトツリーを作成したいと思います。私の目的は、このテンプレートを検証するときにオブジェクトツリーを作成することです。
現在は機能していますが、私のソリューションは本当に汚いと思います。
- フォームにある要素の数に応じて、js/jqueryを使用してリストを作成する
- データ引数として$.postを使用してこれらのリストを渡す
- リクエストのリストを使用して、ビューのdjangoデータモデルにオブジェクトを作成します
私は本当により良い解決策があると確信しています:p
- 複数の投稿を使用して、さまざまなビュー(A、B、Cで区別)を介してオブジェクトを作成しますか?(しかし、同期の問題..)
- jsonを使用して、js / jquery側でオブジェクトを直接表現しますか?
- 別の解決策?
多くの感謝-明確にするために編集
編集:
注:ここでの私のデータモデルは異なります(前に簡略化した)ので:セッションは以前の「オブジェクトA」です演習は「オブジェクトB」です繰り返しは「オブジェクトC」です-申し訳ありませんが、十分に明確になることを願っています(最終投稿で修正します)
ここで、あなたの助けを借りて、いくつかの進歩があります:)私はFormとFormSetで少し遊んだことがあります。明らかに、その強力な:)
だから今私は次のビューを持っています:
class RepetitionForm(forms.Form):
weight = forms.CharField()
count = forms.CharField()
def workoutForm(request):
RepetitionFormSet = formset_factory(RepetitionForm, extra=1)
if request.method == 'POST':
repetitionFormSet = RepetitionFormSet(request.POST)
user = get_object_or_404(User, pk=1)
session = Session(date=datetime.date.today(), user=user)
session.save()
exerciseTypeRef = get_object_or_404(ExerciseTypeRef, pk=1)
exercise = Exercise(session = session, exerciseTypeRef = exerciseTypeRef)
exercise.save()
if repetitionFormSet.is_valid():
for repetitionForm in repetitionFormSet.cleaned_data:
if(repetitionForm.is_valid()):
weight = repetitionForm.data['weight']
count = repetitionForm.data['count']
return HttpResponse("ok")
else:
repetitionFormSet = RepetitionFormSet()
return render_to_response('workoutForm.html', {'formSet': repetitionFormSet}, context_instance=RequestContext(request))
テンプレート側は次のようなものです:
{% csrf_token %}
{{ formSet.management_form }}
<ul id="idUlFormSet">
{% for item in formSet %}
<li>
{{ item }}
</li>
{% endfor %}
(この巧妙な投稿で動的にフォームインスタンスを追加するために、テンプレートでより多くのコードが使用されています 。Django-オートコンプリートを使用したJavascript動的インラインFormSet、ここでは説明しません)
現在、フォームを送信すると、ビューから次のエラーが表示されました。
「キー'ウェイト'が見つかりません
私がしようとしている場合
repetitionItem.isValid()
「RepetitionForm」オブジェクトに属性「isValid」がありません
forms.Formの代わりにforms.ModelFormを使用している場合も、同じ問題が発生します。
私はかなり立ち往生しています:p
私のモデル
class User(models.Model):
name = models.CharField(max_length=100)
mail = models.CharField(max_length=100)
dateCreated = models.DateTimeField('User creation date')
def __unicode__(self):
return self.name
class Session(models.Model):
date = models.DateField('Session Date')
user = models.ForeignKey(User)
def __unicode__(self):
return self.date.strftime("%Y/%m/%d")
class ExerciseTypeRef(models.Model):
name = models.CharField(max_length=100)
desc = models.CharField(max_length=300)
def __unicode__(self):
return self.name
class Exercise(models.Model):
session = models.ForeignKey(Session)
exerciseTypeRef = models.ForeignKey(ExerciseTypeRef)
def __unicode__(self):
return self.exerciseTypeRef.name
class Repetition(models.Model):
exercise = models.ForeignKey(Exercise)
count = models.IntegerField()
weight = models.IntegerField()