1

私はこれで数日間苦労してきました。

私はdjango Pythonを使用しており、すべてのオブジェクトには、ユーザーが変更できず、ページで表示できない抽象オブジェクトがありますが、ログイン時に選択しました。ログインすると、ユーザー、パスワード、このオブジェクトを選択すると、ページ内のすべてのオブジェクトが関連していることを確認したいので、別のインスタンスでログインしたときに以前のインスタンスが表示されないようにします。

これが私のモデルです: (ご想像のとおり、すべてのオブジェクトには commonObject があります)

class Model(models.Model):
    name = models.CharField(max_length=200)
    thing = models.IntegerField()
    commonObject = models.ForeignKey(commonObject, editable=False)

今私の問題は、commonObject. 私はdjango-smarterを使用していることに注意してください。ここにadd_viewコードがあります

action = self.action
form_kwargs = self.get_form_kwargs(action, request, *args, **kwargs)
if request.method == 'POST':
    form = self.get_form(action=action,
                        data=request.POST,
                        files=request.FILES,
                        **form_kwargs)
    if form.is_valid():
        form.cleaned_data['commonObject'] = pk.loads(request.session.get('commonObject'))
        print form.cleaned_data #Here the commonObject is the one that I want, but save doesn't seem to care
        instance = self.save_form(form)
        return self.add_success(request, instance)
else:
    form = self.get_form(action=action, **form_kwargs)
context = {'form': form}
return self.render_to_response(context)

私のアプローチは次のとおりです。

1)モデル書き換えcommonObjectのメソッド内に保存します。save()これに関する問題は、リクエスト オブジェクトにアクセスできないことです (共通オブジェクトをセッションに保存することも、ユーザー オブジェクトの別の列に保存することもできません)。

2) 変更form.clean_dataが機能していないようです。このアプローチの中で、オブジェクトをシリアル化しようとしました。これは「選択可能」で成功しましたがModels.py、変更したものではなく、以前の形式を実際のものとして取っています。

3) と を使用pre_savepost_saveていますが、 のリクエスト オブジェクトにアクセスできませんModels.py

これで私を助けてもらえますか?

4

1 に答える 1

0

あなたのようにデータを直接変更することはできないと思います。データインスタンスを作成するにはフォームを保存する必要がありますが、まだコミットしてから必要なデータを変更する必要はありません。必要なものをすべて変更したら、(コミットして) 保存します。

例 (テストではない)

if form.is_valid():
    instance = form.save(commit=False)
    instance.commonObject = pk.loads(request.session.get('commonObject'))
    instance.save()
    return self.add_success(request, instance)
于 2012-11-26T16:24:36.160 に答える