Python Django许多关系细节
我想建立一个网站,在这个网站上,用户可以使用Django互相发送文字。当用户删除一个单词时,该单词将仅为该用户删除。我有一个工作网站;唯一的问题是当一个单词被删除时,它会被所有用户删除。我如何解决这个问题,它是一个涉及到很多关系的问题吗 Django单词模型:Python Django许多关系细节,python,html,django,Python,Html,Django,我想建立一个网站,在这个网站上,用户可以使用Django互相发送文字。当用户删除一个单词时,该单词将仅为该用户删除。我有一个工作网站;唯一的问题是当一个单词被删除时,它会被所有用户删除。我如何解决这个问题,它是一个涉及到很多关系的问题吗 Django单词模型: from django.db import models from datetime import datetime from django.contrib.auth.models import User class Word(mod
from django.db import models
from datetime import datetime
from django.contrib.auth.models import User
class Word(models.Model):
definition = models.CharField(max_length=350)
turkish = models.CharField(max_length=50)
english = models.CharField(max_length=50)
users = models.ManyToManyField(User)
creator = models.CharField(max_length=50)
def __str__(self):
return self.english
def summary(self):
return self.definition[:50] + "..."
共享视图功能:
@login_required
def send(request):
users_list = User.objects.all().exclude(username=request.user.username)
user = request.user
small = user.username.title()
send_to_str = request.POST['user']
sent_word_str = request.POST['word']
send_to = User.objects.get(username=send_to_str)
sent_word = Word.objects.get(id=sent_word_str)
if not users_list:
sendmessage = 'You have no friends'
else:
sendmessage = ''
sent_word.users.add(send_to)
words = Word.objects.filter(users=user).order_by('-english')
return render(request, 'intro.html', {'sendmessage': sendmessage, 'words': words, 'small' : small})
@login_required
def delete(request):
if request.method == 'POST':
current_id = request.POST['word_id']
current_word = Word.objects.get(id=current_id)
current_word.delete()
messages.add_message(request, messages.INFO, 'Succesfully deleted.')
return redirect('translater:home')
else:
return render(request, 'intro.html', {'message': 'there is a problem'})
删除视图功能:
@login_required
def send(request):
users_list = User.objects.all().exclude(username=request.user.username)
user = request.user
small = user.username.title()
send_to_str = request.POST['user']
sent_word_str = request.POST['word']
send_to = User.objects.get(username=send_to_str)
sent_word = Word.objects.get(id=sent_word_str)
if not users_list:
sendmessage = 'You have no friends'
else:
sendmessage = ''
sent_word.users.add(send_to)
words = Word.objects.filter(users=user).order_by('-english')
return render(request, 'intro.html', {'sendmessage': sendmessage, 'words': words, 'small' : small})
@login_required
def delete(request):
if request.method == 'POST':
current_id = request.POST['word_id']
current_word = Word.objects.get(id=current_id)
current_word.delete()
messages.add_message(request, messages.INFO, 'Succesfully deleted.')
return redirect('translater:home')
else:
return render(request, 'intro.html', {'message': 'there is a problem'})
已重定向到此html:
{% if words %}
<h3 style="color:gray;font-weight:bold">My Word List</h3>
<br>
{% endif %}
{% for word in words %}
<h4 style="color:red">{{ word.english }} / {{ word.turkish }} </h4>
<h4 style="color:green">{{ word.summary }} / {{ word.creator }}</h4>
<br>
<button type="button" onClick="document.getElementById('deleterForm').submit()" class="btn btn-warning">Delete!</button>
<button type="button" onClick="document.getElementById('sharerForm').submit()" class="btn btn-primary">Share!!</button>
<form id="deleterForm" action="{% url 'translater:delete' %}" method="POST">
{% csrf_token %}
<input type="hidden" name="word_id" value="{{ word.id }}">
</form>
<br>
<form id="sharerForm" action="{% url 'translater:share' %}" method="POST">
{% csrf_token %}
<input type="hidden" name="word_id" value="{{ word.id }}">
</form>
<form id="senderForm{{ word.id }}" action="{% url 'translater:send' %}" method="POST">
{% csrf_token %}
{% for user in users_list %}
<input type="submit" name="user" value="{{ user }}">
<input type="hidden" name="word" value="{{ word.id }}">
{% endfor %}
{{ sendmessage }}
</form>
<br>
{% endfor %}
{%if words%}
我的词表
{%endif%}
{单词中的单词百分比为%}
{{word.english}/{{word.turkish}}
{{word.summary}}/{{word.creator}
删除!
分享!!
{%csrf_令牌%}
{%csrf_令牌%}
{%csrf_令牌%}
{用户列表%中的用户的百分比}
{%endfor%}
{{sendmessage}}
{%endfor%}
您正试图实际删除该单词,但您的“删除”应该只是更新用户列。它实际上并不是删除,它只是一个只影响“用户”字段的更新。。就像任何其他的“更新”一样,我如何选择给用户的单词?current\u english=request.POST['word\u english']current\u word=user.words.get(english=current\u english)您不会从用户那里选择单词。忘记用户。把它看作是多对多关系中的一个简单变化。您只需要从m2m表中删除“request.user”。关于如何简单地更新m2m表格,请参见以下答案:谢谢您的回答:Dyou正在尝试实际删除该单词,但是您的“删除”应该只更新用户列。它实际上并不是删除,它只是一个只影响“用户”字段的更新。。就像任何其他的“更新”一样,我如何选择给用户的单词?current\u english=request.POST['word\u english']current\u word=user.words.get(english=current\u english)您不会从用户那里选择单词。忘记用户。把它看作是多对多关系中的一个简单变化。您只需要从m2m表中删除“request.user”。关于如何简单地更新m2m表,请参见以下答案:谢谢您的回答:D