我正在构建一个简单的消息传递应用程序,用户可以在其中相互发送消息。我正在开发一项功能,该功能允许用户发送他们以前保存为草稿的消息。
问题是,当没有提交输入或用户名不存在时,它不会引发任何错误。我认为有些东西阻止了它,这意味着它不会创建要发送给其他用户的消息
这是我的模型
class Thread(models.Model):
subject = models.CharField(max_length=100, blank=True)
user = models.ForeignKey(User)
class Message(models.Model):
user = models.ForeignKey(User, related_name='sender')
recipient = models.ForeignKey(User, related_name='recipient')
created = models.DateTimeField(auto_now_add=True)
body = models.CharField(max_length=1000)
read = models.BooleanField(default=False)
trash = models.BooleanField(default=False)
sentmessage = models.BooleanField(default=False)
thread = models.ForeignKey(Thread,blank=True,null=True)
def __unicode__(self):
return self.body
因为您需要主题、收件人和正文来发送消息,并且它们都处于不同的模型中,此时用户已经创建了消息并将其保存为草稿。我创建了 2 个表单,每个表单都有不同的模型,并用它们的对象填充每个表单。
class DraftForm(forms.ModelForm):
recipient = forms.CharField(required=True,max_length=2)
body = forms.CharField(widget=forms.Textarea,required=True,max_length=1)
hidden_field = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = Message
fields = ('body',)
def clean_recipient(self):
recipient = self.cleaned_data['recipient']
try:
recipient = User.objects.get(username=recipient)
except User.DoesNotExist:
raise forms.ValidationError("This username does not exist")
return recipient
class ThreadForm(forms.ModelForm):
class Meta:
model = Thread
fields = ('subject',)
意见
@login_required
def ReadDraft(request,id):
try:
messages = Message.objects.get(pk=id,recipient=request.user,trash=True)
except Message.DoesNotExist:
return HttpResponseRedirect(reverse('world:Display'))
thread = Thread.objects.get(message=messages)
initial = {}
initial.update({'hidden_field': messages.id})
draft = DraftForm(instance=messages,initial=initial)
thread = ThreadForm(instance=thread)
person = Person.objects.get(user=request.user)
if request.method =='POST':
id = request.POST.get('hidden_field', False)
form = ThreadForm(request.POST)
forms = DraftForm(request.POST)
if form.is_valid and forms.is_valid():
m = Message.objects.get(pk=id)
recipient = form.cleaned_data['recipient']
subject = form.cleaned_data['subject']
body = form.cleaned_data['body']
message = Message.objects.create(user=request.user,recipient=recipient,body=message,thread=m.thread)
return render(request,'create.html',{'DraftForm':draft,'ThreadForm':thread,'person':person})
形式
{% if DraftForm and ThreadForm %}
<form method="POST" >{% csrf_token %}
{{DraftForm.recipient}}
{{ThreadForm.subject}}
{{DraftForm.body}}
{{DraftForm.hidden_field}}
<input type = "submit" value= "send" class="save" id="send" />
</form>
{% endif %}
{{ThreadForm.subject.errors}}
{{DraftForm.recipient.errors}}
{{DraftForm.body.errors}}