Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.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检查User.name是否已经在数据库中——通过User.name而不是User.id进行匹配_Python_Database_Django_Django Models - Fatal编程技术网

Python Django检查User.name是否已经在数据库中——通过User.name而不是User.id进行匹配

Python Django检查User.name是否已经在数据库中——通过User.name而不是User.id进行匹配,python,database,django,django-models,Python,Database,Django,Django Models,我有一个简单的个人Django项目,它允许某人通过在索引页面上提供用户名和消息来创建消息。然后,他们可以通过数据库中的链接查看给定用户的所有消息。理想情况下,来宾会键入用户名和消息,如果用户名不在数据库中,则会创建用户名并保存消息。但是,如果它在数据库中,则该消息将与该现有用户名链接,当我查看该用户的所有消息时,将显示旧消息和当前消息 我现在面临的问题是,我无法找到当前消息并将其链接到现有用户名。比如说 User: Josh Message: Hello World User: Josh Me

我有一个简单的个人Django项目,它允许某人通过在索引页面上提供用户名和消息来创建消息。然后,他们可以通过数据库中的链接查看给定用户的所有消息。理想情况下,来宾会键入用户名和消息,如果用户名不在数据库中,则会创建用户名并保存消息。但是,如果它在数据库中,则该消息将与该现有用户名链接,当我查看该用户的所有消息时,将显示旧消息和当前消息

我现在面临的问题是,我无法找到当前消息并将其链接到现有用户名。比如说

User: Josh
Message: Hello World

User: Josh
Message: Second time.
两个用户在数据库中都有单独的ID,因此当我查看来自“Josh”的消息时,它只会给我一个或另一个。我希望他们在第二次输入Josh时链接起来,这样当我查看Josh时,所有消息都会显示出来。基本上,我如何通过User.name而不是User.id匹配它们

模型

class User (models.Model):
    name = models.CharField(max_length=20)

    def __unicode__(self):              
        return self.name

class Message (models.Model):
    content = models.TextField(max_length=140)
    user = models.ForeignKey(User)
    time = models.DateTimeField()

    def __unicode__(self):              
        return self.content
views.py

def index (request):
    if request.method == 'POST':
        u = User(name=request.POST.get('user'))
        u.save()
        m = Message(content=request.POST.get('message'), user = u)
        m.save()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))
    else:
        u = User()
        m = Message()
        return render_to_response('index.html', {
                'user': u,
                'message': m,
                }, RequestContext(request))

def view_messages(request, user_name=None):
    if user_name:
        user = get_object_or_404(User,pk=user_name)
        return render_to_response('messages.html', {
            'user': user,
            'messages': Message.objects.filter(user=user)
            })
    else:
        return render_to_response('messages.html', {
            'messages': Message.objects.all(),
            })
index.html

<form action="{% url 'index' %}" id="user_form" method = "POST">
{% csrf_token %}
<input type="text" name="user" id="user" maxlength="20" placeholder="Username" onblur="return validUser(this)">
<br>
<br>
<textarea rows="4" cols="35" name="message"  id="message" maxlength="140" placeholder="Message goes here" onblur="return validMessage(this)"></textarea><br>
<input type="submit" value="Submit" onclick="return finalCheck()">
</form>
谢谢大家!

定义类成员时,必须设置primary_key=True参数。否则,Django将添加一个自动ID字段,如前所述

为您的模型类尝试以下操作:

class User (models.Model):
    name = models.CharField(max_length=20, primary_key=True)

    def __unicode__(self):
        return self.name

当我这样做并试图查看用户的消息时,它会立即显示所有用户消息。我应该如何尝试获取用户内容?在此之前,它是作为/messages/完成的,这取决于您的view\u tweets方法是如何定义的。我假设前面的查找将使用id。现在,它必须与用户名一起使用。对,因此我尝试将user_id替换为user_name,但现在收到一个NoReverseMatch错误,返回“messages”,参数“u'josh”,“关键字参数“{}”未找到。尝试了1种模式:['messages/?P\\d+?/']将视图消息添加到原始帖子新错误与url.py中的url规则有关,而与视图定义无关。