2

私のユーザー サインアップ プロセスでは、ユーザーはまず自分のアカウントを作成し、次に LIST オブジェクトを作成します。次に、作成したばかりの LIST オブジェクトのダッシュボードに移動します。これを実現するには、最近作成された LIST オブジェクトの list_id にアクセスできるようにして、それを次のビュー/テンプレートに渡すことができるようにする必要があります。list_id は LIST テーブル/クラスの主キーであるため、ユーザーにこの値を作成させたくありません。自動インクリメントです。モデルのフィールドは次のとおりです。

class List(models.Model):
    list_id = models.IntegerField(primary_key=True)

MySQL からの list_id の説明:

+---------------+--------------+------+-----+---------+----------------+
| Field         | Type         | Null | Key | Default | Extra          |
+---------------+--------------+------+-----+---------+----------------+
| list_id       | int(11)      | NO   | PRI | NULL    | auto_increment |

ビューは次のとおりです。

@login_required
@permission_required('social_followup.add_list')
def user_create(request):
    if request.method == 'POST':
        list_form = forms.ListForm(request.POST)
        if list_form.is_valid():
            list_create = list_form.save()
            messages.success(request, 'List {0} created'.format(list_create.list_id))
            up, _ = UserProfile.objects.get_or_create(user=request.user, list_id=list_create)
            return redirect(reverse('user_dashboard', args=(2,)))  # 2 is just an example
    else:
        list_form = forms.ListForm()

    return TemplateResponse(request, 'dashboard/create.html', {'list_form': list_form, })

ただし、フォームの一部として list_id を含めないと、その属性にアクセスできないことがわかりました (list_idNoneがフィールドでない場合に list_create.list_id を実行すると返されます)。私のテンプレートでは、次のように list_id フィールドを非表示にしています。

<div class="control-group {% if list_form.list_id.errors %}error{% endif %}">
    <div class="controls">
        {{ list_form.list_id.as_hidden }}
    </div>
</div>

list_id は必須で非表示であるため、list_id に値がないため、フォームは検証されません。ただし、フィールドとして list_id を削除すると、ビューで list_id 属性にアクセスできないようです。list_create.list_id で値を取得し、フィールドを非表示にできるように、次の list_id をこのフィールドに自動入力する方法はありますか? または、これを達成する別の方法はありますか?

4

1 に答える 1

1

.save()主キーは呼び出される前に存在しません。フォームを保存した後で PK にアクセスする場合は、テンプレートに渡すことでアクセスできます。

list_form = forms.ListForm(instance=list_create)

そして、あなたのテンプレートで

{{list_form.instance.id}}

于 2013-06-04T19:18:51.460 に答える