【发布时间】:2016-10-28 21:28:15
【问题描述】:
我正在寻找存储负责表单提交的用户名称的最可取的方法,以便我可以轻松地按用户名组织他们提交的表单,就像每个用户的“帐户设置”一样。
我已经搜索过,但解决方案非常分散,所有关于此的帖子都指的是旧版本以及每个 Django 版本中更改的最佳解决方案。我仍在学习 Django 的基础知识,这可能无济于事。
这是我的views.py:
def add(request):
title = 'Add Reddit Account'
# ADD FORM
form = AddRedditForm(request.POST or None)
instance = form.save(commit=False)
instance.user = request.user
instance.save()
if request.method == "POST":
print(request.POST)
context = {
"form": form,
"title": title,
"user": instance.user
}
return render(request, "addreddit/add.html", context)
还有我的models.py:
from django.db import models
class Account(models.Model):
user_name = models.CharField(max_length=20)
password = models.CharField(max_length=18)
secret = models.CharField(max_length=100)
tag = models.CharField(max_length=20, blank=True)
timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)
user = models.ForeignKey('auth.User', null=True)
def __str__(self): #Python 3.3 is __str__
return str(self.user)
return self.user_name
return self.password
return self.secret
return self.tag
return self.timestamp
最后,forms.py 是相关的:
from django import forms
from .models import Account
class AddRedditForm(forms.ModelForm):
class Meta:
model = Account
fields = ['user_name','password','secret','tag']
user_name = forms.CharField(required=True)
password = forms.CharField(widget=forms.PasswordInput,required=True)
secret = forms.CharField(required=True)
tag = forms.CharField(required=False)
这似乎工作得很好,除了保存在表单中的唯一是用户,而不是其他信息。
建议编辑:
from django.conf import settings
from django.core.mail import send_mail
from django.shortcuts import render, redirect
from .forms import AddRedditForm
# Create your views here.
def add(request):
title = 'Add Reddit Account'
# ADD FORM
if request.method == "POST":
form = AddRedditForm(request.POST or None)
print(request.POST)
if form.is_valid():
instance = form.save(commit=False)
instance.user = request.user
instance.save()
return redirect('addreddit/add')
context = {
"title": title,
"user": request.user, # not available if you haven't submitted the form
"form": form
}
return render(request, "addreddit/add.html", context)
【问题讨论】: