【发布时间】:2014-02-27 19:26:55
【问题描述】:
我有一个简单的个人 Django 项目,它允许某人通过在索引页面上提供用户名和消息来创建消息。然后,他们可以通过数据库中的该链接查看给定用户的所有消息。理想情况下,客人会键入他们的用户名和消息,如果用户名不在数据库中,则会创建它并保存消息。但是,如果它在数据库中,则该消息与该现有用户名相关联,当我查看该用户的所有消息时,旧消息和当前消息应该会显示出来。
我现在面临的问题是我无法找到当前消息并将其链接到现有用户名。例如
User: Josh
Message: Hello World
User: Josh
Message: Second time.
两个用户在数据库中都有单独的 ID,因此当我查看来自“Josh”的消息时,它只会给我一个或另一个。我希望他们在第二次输入 Josh 时链接起来,这样当我查看 Josh 时,所有消息都会显示出来。 Essentially, how do I match them via User.name rather than 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>
谢谢!
【问题讨论】:
标签: python database django django-models