【问题标题】:Django send mail , draft function issueDjango 发送邮件,草稿功能问题
【发布时间】:2013-06-29 18:43:59
【问题描述】:

我正在尝试在使用自定义 UserModel 的简单消息应用程序上实现草稿功能

草稿功能是指用户不立即发送邮件而是将其保存。

我无法弄清楚如何使用我的模型实现草稿功能。

我能够弄清楚如何发送邮件。

@login_required
def Create(request):
    person = Person.objects.get(user=request.user)
    form = NewMessageForm()
    if request.POST.get('send', False):
        form = NewMessageForm(request.POST)
        if form.is_valid():
            recipient = form.cleaned_data['recipient']
            subject = form.cleaned_data['subject']
            message = form.cleaned_data['message']
            thread = Thread.objects.create(subject=subject,user=request.user)
            recipient = User.objects.get(username=recipient)
        message =    Message.objects.create(user=request.user,recipient=recipient,body=message,thread=thread)
            return HttpResponseRedirect(reverse('world:message'))

    elif request.POST.get('save', False):
        #How can I save it as a draft?

    return render(request,'create.html',{'messages':messages,'form':form,'person':person})

型号

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)


    def __unicode__(self):
        return self.body

表格

class NewMessageForm(forms.ModelForm):
    recipient = forms.CharField(required=True,max_length=1)
    message = forms.CharField(widget=forms.Textarea,required=True,max_length=1)
    checkbox = forms.BooleanField(required=False)
    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 Meta:
    model = Thread 
    fields = ('subject',)  

模板

<form method="POST" >
    {% csrf_token %}
    {{form.recipient}}
    {{form.subject}}
    {{form.message}}
    <input type="submit" value="send" name="_send" />
    <input type="submit" value="save" name="_save" />
</form>

【问题讨论】:

    标签: django


    【解决方案1】:

    您可以在 Message 中添加一个 BooleanField "draft" 来确定当前邮件是否为草稿,并通过排除每条带有状态草稿的邮件以及 recipient = current_user 的位置来过滤邮箱。

    这需要修改你的逻辑,在发送消息时将草稿设置为 0,在保存消息时设置为 1。

    编辑:我没有看到您的 messagesent 属性。您可以将其用于该行为,我认为它是合适的:)

    【讨论】:

    • 我明白了,所以我把收件人当作我自己?
    • 不,您只需要通过排除草稿 = 1 的邮件来过滤收件人看到的邮件列表。类似Messages.objects.filter(recipient=current_user, draft=0)
    • 如果没有指定收件人,您可以通过将收件人字段设为可选来将其设置为Nonestackoverflow.com/questions/6619984/… 我认为这是一个更好的选择;)
    • 1.使该字段也可选(required=False) 2. 检查该字段是否包含某些内容,在这种情况下检查指定的用户是否存在,否则通过。
    • max , 你介意看看这个吗stackoverflow.com/questions/17426279/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-12
    • 2021-08-19
    相关资源
    最近更新 更多