Django 初学者在使用表单时遇到很多困难。是的,我已经完成了本教程并浏览了很多网络 - 我所拥有的是我在这里和其他网站上找到的内容的混合体。我正在使用 Python 2.7 和 Django 1.5。 (虽然官方文档很广泛,但它往往假设您已经了解其中的大部分内容 - 不适合作为初学者参考,甚至不适合作为高级教程)
我正在尝试为“扩展”用户详细信息创建一个表单 - 例如。公司名称、街道地址等,但表单数据未保存到数据库中。
最初我尝试创建一个扩展标准的模型User
模型,但我放弃了——需要修改太多,而且在这个阶段它已经超出了我的能力范围。
所以我创建了一个新模型,名为UserProfile
:
class UserProfile(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL, unique=True)
company = models.CharField(max_length=50, blank=True)
address1 = models.CharField(max_length=50, blank=True)
address2 = models.CharField(max_length=50, blank=True)
city = models.CharField(max_length=20, blank=True)
region = models.CharField(max_length=20, blank=True)
postcode = models.CharField(max_length=10, blank=True)
country = models.CharField(max_length=20, blank=True)
phone = models.CharField(max_length=30, blank = True)
我在网上看到了不同的参考资料,关于我是否应该使用以下链接链接到用户模型:ForeignKey
(如上所述)或使用 OneToOne。
我正在尝试使用 ModelForm(保持简单的形式)。这是我的 forms.py
from django.forms import ModelForm
from .models import UserProfile
class UserDetailsForm(ModelForm):
class Meta:
model = UserProfile
fields = ['company','address1','address2','city','region', 'postcode','country','phone']
这是我的观点:
def UserDetailsView(request):
#f = 0
if request.method == 'POST':
f = UserDetailsForm(request.POST, instance = request.user)
if f.is_valid():
f.save()
else:
f = UserDetailsForm(request.POST , instance = request.user)
print "UserDetails objects: ", (UserProfile.objects.all())
return render_to_response('plagweb/console/profile.html',
{ 'form': f},
context_instance=RequestContext(request))
(是的,用户个人资料与用户详细信息之间存在不一致 - 这是我所有黑客行为的产物,一旦我开始工作就会修复)
诊断显示f.is_valid()
返回 True。
同样,诊断显示UserProfile.objects.all()
如同空的一样。我在上面的 save() 视图中以及 Django 控制台中尝试了此操作。
这是我的模板:
<form method="POST" action="">
<table>{{ form }}</table>
<input type="submit" value="Update" />
{% csrf_token %}
</form>
目前主要问题是表单数据没有保存到数据库中。我不知道是否正在读取(一旦我在数据库中有一些数据......)
一种想法是,User
关系可能会引起问题?
附录,来自 Daniel Roseman 的有用评论/帮助: