簡體   English   中英

Django檢查User.name是否已在數據庫中-通過user.name而不是user.id進行匹配

[英]Django check to see if User.name is in database already — match via user.name rather than user.id

我有一個簡單的個人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>

謝謝!

定義類成員時,必須設置primary_key=True參數。 否則,Django的增加所解釋的自動ID字段這里

為您的Model類嘗試以下操作:

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

    def __unicode__(self):
        return self.name

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM