使用django将一些字符串追加到数据库中的列表中

使用django将一些字符串追加到数据库中的列表中,django,django-models,django-views,Django,Django Models,Django Views,我在数据库的列表中添加字符串时遇到问题 请帮帮我 这是我的模特 class friendList(models.TextField): myFriend = [] class friend(models.Model): username = models.CharField(max_length="30") friends = friendList().myFriend 这是view.py def addfriend(request): try:

我在数据库的列表中添加字符串时遇到问题 请帮帮我

这是我的模特

class friendList(models.TextField):
    myFriend = []
class friend(models.Model):
    username = models.CharField(max_length="30")
    friends = friendList().myFriend
这是view.py

def addfriend(request):
    try:
        user = request.session['user']
        if request.method == 'POST':
            friend.objects.filter(username = user.username)[0].friends.append(request.POST['user_name'])
        return HttpResponse("ok he/she is your friend now!!")
    except:
        return render(request, 'login.html', {'error':"you are not logged in"})

你需要修理你的模型。由于一个朋友可以有许多朋友,每个朋友都是类型为
friend
的对象,因此您可以向同一模型添加:

class Friend(models.Model):
    username = models.CharField(max_length="30")
    friends = models.ForeignKey('self')
Python中的约定是为类名使用InitialCaps(也称为CamelCase)

现在,在你看来:

from django.contrib import messages
from django.shortcuts import redirect
from django.contrib.auth.decorators import login_required

@login_required
def addfriend(request):
    if request.method == 'POST':
        the_user = Friend.objects.get(username=request.user.username)
        the_friend = Friend.objects.get(username=request.POST['user_name'])
        the_user.friends_set.add(the_friend)
        messages.add_message(request, messages.INFO, 'Friend added!')
        return redirect('/index')
    else:
        messages.add_message(request, messages.ERROR, 'No friend selected!')
        return redirect('/index')
对于
POST
请求,您应该始终重定向。在这里,我使用将用户重定向回索引页面(您可以更改URL以将其重定向到其他任何位置)

Django提供了一个我用来向用户显示消息的窗口;文档将向您展示如何向模板中添加代码以显示消息


最后,是一种确保视图只有在用户登录时才可访问的方法。它是内置身份验证框架的一部分。

我认为您的所有好友实例(“好友”必须是大写)都在共享fieldList类的类变量myFirned。我使用了这个print friend.objects.filter(username=user.username)[0]。friends在返回HttpResponse之前是可以的,但在我的数据库中它不会保存