2013-07-02 128 views
1

我試圖實現其使用自定義的usermodel的Django發送郵件,草稿功能問題

功能

匯票是我的簡單消息應用的功能草案時,用戶不發送郵件直線距離,但節省了它。

我很難搞清楚如何使用我的模型實現草稿函數。

我能弄清楚如何發送郵件。

@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> 

回答

1

如果當前郵件是草稿,您可以添加在消息BooleanField 「草案」 的決定或不,並過濾郵箱通過排除每個郵件與州草案和recipient = current_user

這需要修改一點您的邏輯,通過設置草稿爲0,當郵件發送時,1當郵件保存。

編輯:我沒有看到您的messagesent屬性。你可以使用它作爲該比較,我認爲這是適當:)

+0

我看到所以我把收件人作爲我自己呢? – JackRoster

+0

不,您只需過濾收件人看到的郵件列表,通過排除具有draft = 1的郵件即可。類似於'Messages.objects.filter(recipient = current_user,draft = 0)' –

+0

如果未指定收件人,您可以通過將收件人字段設置爲可選,將其設置爲「無」:http://stackoverflow.com/questions/6619984/can-i-make-the-foreign-key-field-optional-in-django-model I認爲這是一個更好的選擇;) –