0

我在将一些字符串附加到数据库列表中时遇到问题请帮助我

这是我的models.py

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"})
4

1 回答 1

2

你需要修复你的模型。由于一个朋友可以有很多朋友,每个朋友都是一个类型的对象Friend,你可以ForeignKey在同一个模型中添加一个:

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请求,您应该始终重定向。在这里,我使用redirect快捷方式将用户重定向回索引页面(您可以更改 URL 以将它们重定向到其他任何地方)。

Django 提供了一个消息框架,我用它来向用户显示消息;该文档将向您展示如何向模板添加代码以显示消息。

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

于 2013-07-03T12:22:43.127 回答