Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将其他数据保存到Django中的用户配置文件_Python_Django - Fatal编程技术网

Python 将其他数据保存到Django中的用户配置文件

Python 将其他数据保存到Django中的用户配置文件,python,django,Python,Django,我已经启用了用户创建配置文件的功能;但是,一旦用户已经登录,我需要能够将其他数据保存到配置文件中 假设John已登录。登录后,他决定将某个术语加入书签。每次他为一个术语(当前页面的url)添加书签时,它都会被添加到与他的个人资料相关联的“术语”部分 我不确定如何允许添加多个术语-我不认为CharField是正确的,我也不知道如何将模板中的表单链接到视图,以便它实际将这些数据保存到配置文件中。以下是我目前拥有的: models.py class UserProfile(models.Model):

我已经启用了用户创建配置文件的功能;但是,一旦用户已经登录,我需要能够将其他数据保存到配置文件中

假设John已登录。登录后,他决定将某个术语加入书签。每次他为一个术语(当前页面的url)添加书签时,它都会被添加到与他的个人资料相关联的“术语”部分

我不确定如何允许添加多个术语-我不认为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)
url.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>

{%csrf_令牌%}
我想你可以用它为任何没有代码的用户保存书签。 或者添加型号smt关于这样的术语

class Term(models.Model):
    user = models.ManyToManyField(User, related_name='terms')
    term = models.CharField(max_length=1000)
并使用user.terms.all()获取所有用户的术语

但是,若您需要保存模式和模型,则需要自定义字段,该字段的工作方式类似于postgres中的数组字段。如果您使用postgresql数据库,请添加到您的项目中,并使用TextArrayField等术语,如果您的数据库不是postgres,请参见此处- 第二个答案题为“过早优化是万恶之源”,由用户jb提供

具有关系的解决方案是“规范化的”——简单而强大

使用“阵列字段”的解决方案是“非规范化的”——速度更快,但存在数据不一致的风险