2017-06-03 58 views
1

如何从django模型中获取文本字段数据以提交电子邮件?我在视图中尝试了很多变体,其中clean_data.get()def clean(self):方法等等。不知道为什么这么难。如何从django modelform获取文本字段数据以提交电子邮件?

# models.py - service model 
class Service(models.Model): 
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE) 
    created_at = models.DateTimeField(auto_now_add=True) 

    service_type = models.ManyToManyField('ServiceType') 
    description = models.TextField(blank=True) 

    def __str__(self): 
     return "Service Order for: {user}".format(user=self.user) 


class ServiceType(models.Model): 
    label = models.CharField(max_length=200, unique=True) 

    def __str__(self): 
     return self.label 

# forms.py 
class NewServiceForm(forms.ModelForm): 
    accept_tos = forms.BooleanField(required=True) 

    class Meta: 
     model = Service 
     fields = '__all__' 
     exclude = ('user', 'created_at',) 

# views.py 
@login_required 
def newservice(request): 
    if request.method == 'POST': 
     form = NewServiceForm(request.POST) 
     if form.is_valid(): 
      form.instance.user = request.user 
      service = form.save() 

# SEND EMAIL - send copy of project/service modelform data to user and site owner 

      name = request.user.first_name+request.user.last_name 
      username = request.user.username 
      subject = 'New Service Order' 
      from_email = request.user.email 
      service_data = form.cleaned_data 
      message = ''' From: {} {} {} 
      \n {} 
      \n {} 
      '''.format(name, from_email, username, subject, service_data) 
      recipients = ['[email protected]', request.user.email] 
      try: 
       send_mail(subject, message, from_email, recipients) 
      except BadHeaderError: 
       return HttpResponse('Invalid header found.') 
# END EMAIL 
      messages.warning(request, 'Success! Your service order has been submitted.') 
      return redirect('projects') 

     else: 
      messages.error(request, 'Invalid submission, check and try again.') 
    else: 
     form = NewServiceForm() 

    return render(request, 'dashboard/newservice.html', {'form': form}) 

# newservice.html 

<form method="post" id="newprojectform">   
      {% csrf_token %} 

     Service Type <br> {{ form.service_type }} <br><br> 
        {{ form.accept_tos }} <br><br> 
     Description {{ form.description }} <br><br> 
     <button class="btn btn-sm" type="submit">Submit</button> 
       </div> 
</form> 

即时得到错误的输出发送到我下面的电子邮件收件箱:我只是想选择文本输出,并说明发送到我的电子邮件收件箱中(而不是布尔= TRUE),即“编辑内容添加内容测试说明去这里的

{'service_type': <QuerySet [<ServiceType: Edit Content>, <ServiceType: Add Content>, 'accept_tos': True, 'description': 'Test Description goes here'} 
+0

请将'template'代码 –

回答

0

很多问题与M2M表单字段数据检索后,我把使用项目= form.save()对象从已创建的模型数据。很多争斗,但有点更容易的解决方案。

相关问题