我已经启用了用户创建配置文件的功能;但是,一旦用户登录,我需要能够将其他数据保存到配置文件中。
说John已登录。登录后,他决定要为某个术语添加书签。每次他为一个术语(当前页面的网址)添加书签时,它都会被添加到与其个人资料相关联的“条款”部分。
我不确定如何允许添加多个术语 - 不要认为CharField是正确的,我也不知道如何将模板中的表单链接到视图以便它实际上将此数据保存到配置文件。这是我现在拥有的:
models.py
class UserProfile(models.Model):
user = models.OneToOneField(User)
terms = models.CharField(max_length=1000)
views.py
这就是我创建用户的方式:
def register(request):
context = RequestContext(request)
registered = False
if request.method == 'POST':
user_form = UserForm(data=request.POST)
profile_form = UserProfileForm(data=request.POST)
if user_form.is_valid() and profile_form.is_valid():
user = user_form.save()
user.set_password(user.password)
user.save()
profile = profile_form.save(commit=False)
profile.user = user
profile.save()
registered = True
else:
print user_form.errors, profile_form.errors
else:
user_form = UserForm()
profile_form = UserProfileForm()
return render_to_response(
'app/register.html',
{'user_form': user_form, 'profile_form': profile_form, 'registered': registered},
context)
这就是我试图用术语做的事情:
def terms(request):
context = RequestContext(request)
url = request.get_full_path()
profile = UserProfile()
profile.topics = url
profile.save()
return render_to_response('app/page1.html', {}, context)
urls.py
url(r'^terms/$', views.terms, name='terms'),
和模板文件。
<form method="post" action="{% url 'terms' %}" enctype="multipart/form-data">
{% csrf_token %}
<input type="submit" name="submit" value="Save" />
</form>
答案 0 :(得分:0)
我认为您可以使用https://github.com/brosner/django-bookmarks为没有代码的用户保存书签。 或者像这样添加关于Term的模型smt
class Term(models.Model):
user = models.ManyToManyField(User, related_name='terms')
term = models.CharField(max_length=1000)
并使用user.terms.all()获取所有用户的条款。
但是,如果你需要保存你的模式和模型,你需要自定义字段,它将像postgres中的数组字段一样工作。如果您使用postgresql db,请将https://github.com/ecometrica/django-dbarray添加到您的项目并使用TextArrayField等术语,如果您的db不是postgres,请参阅此处 - What is the most efficent way to store a list in the Django models? 第二个答案标题为“过早优化是万恶之源”。用户jb。
关系解决方案是“规范化” - 简单而强大
“阵列字段”的解决方案是“非规范化的” - 速度更快但存在非一致数据的风险。