2017-05-07 9 views
-1

Ich versuche, Slug in der Url übergeben, aber ich bin nicht in der Lage, dies zu tun. Der Slug ist in der Form wie wenn Sie einen Text haben: - Text: - Dies ist Stackoverflow Slug: - This-is-stackoverflow aber ich bin nicht in der Lage, dies zu erreichen. mein Modell: -Wie Slug als URL in Django übergeben

from __future__ import unicode_literals 

from django.db import models 


class EmailTemplates(models.Model): 
    id = models.IntegerField(db_column="id", max_length=11, help_text="") 
    subject = models.CharField(db_column="subject",max_length=255) 
    slug = models.CharField(db_column="slug",unique=True, max_length=255) 
    content = models.TextField(db_column="content", help_text="") 
    createdAt = models.DateTimeField(db_column='createdAt',auto_now=True, help_text="") 
    modifiedAt = models.DateTimeField(db_column='modifiedAt',auto_now=True, help_text="") 
    updatedBy = models.IntegerField(db_column='updatedBy', help_text="") 

    class Meta: 
     managed = False 
     db_table = 'email_templates' 

meine url ich versuche ist: -

url(r'^email/edit/(?P<email_template_id>[\w-]+)/$', email_managment.email_send, name='email-edit') 

meine Ansichten ist wie folgt aus: -

@login_required 
@csrf_exempt 
def email_send(request,email_template_id): 
    try: 
     form = emailTemplates(request.POST or None) 
     edit_email_end = 'add' 
     email_template_obj = {} 
     if request.method == 'POST': 
      if form.is_valid(): 
       subject = request.POST.get('subject') 
       lowercase = subject.lower() 
       slug = lowercase.replace(" ","-") 
       print slug 
       content = request.POST.get('content') 
       if email_template_id is None or email_template_id == '': 
        add_email_template_entry = EmailTemplates(subject=subject, content=content,slug=slug) 
        add_email_template_entry.save(using="cms") 
        messages.success(request, 'Successfully added to the email template page') 
       elif email_template_id: 
        email_template_obj = EmailTemplates.objects.using("cms").get(id=email_template_id) 
        email_template_obj.subject = subject 
        email_template_obj.content = content 
        email_template_obj.slug = slug 
        email_template_obj.save(using="cms") 
        messages.success(request, 'Successfully update to the email templates') 
       return redirect('cms:email-list') 

     if email_template_id is not None: 
      edit_email_end = 'edit' 
      email_template_obj = EmailTemplates.objects.using("cms").get(id=email_template_id) 
     return render(request, 'templates/email_managment/add_email.html',{ 
      'edit_email_end': edit_email_end,'email_template_obj':email_template_obj}) 
    except Exception as e: 
     print e 
     raise Http404 

der Fehler, der

steht vor der Tür ist

invalid literal for int() with base 10: 'hello-took-of-fools'

Bitte ignorieren Sie Grama technische Fehler, wenn es welche gibt. Vielen Dank im Voraus

+0

Was meinen Sie, sind Sie nicht in der Lage, die Schnecke zu übergeben? Wie hast du es versucht? Was ist passiert, als du es getan hast? Welchen Fehler hast du bekommen? –

+0

Fehler: -invalid Literal für int() mit Basis 10: 'Hallo-take-of-Dummköpfe' –

+0

Sie müssen die vollständige Traceback zeigen, so dass wir wissen, woher dieser Fehler kommt. Sie sollten auch Ihre Modelle zeigen. –

Antwort

0

Da Sie nicht den vollen Fehler zeigen, müssen wir erraten, was passiert.

Es gibt eine offensichtliche Sache, die Sie falsch machen. Obwohl Sie sich auf den Parameter beziehen, den Sie als email_template_id übergeben, handelt es sich nicht um eine ID, sondern um einen Slug. Aber wenn Sie das Modell abfragen, fragen Sie nach ID und nicht nach Slug ab.

In beiden Orten, wo Sie tun, sollten Sie slug=email_template_id statt id=... haben. Wenn du deinen Parameter nennst, was er eigentlich ist - eher eine Schnecke als eine ID -, wäre das offensichtlicher.

(Beachten Sie auch, dass Ihre Modellform erstellt werden kann, um ein vorhandenes Objekt zu aktualisieren und ein neues Objekt zu erstellen, wenn Sie das Objekt als -Parameter an Ihre Formularinstanz übergeben. Das würde Sie zuerst else blockieren unnötig. Aber auch wenn Sie nicht zu tun wählen, dass, sollten Sie immer die Daten von form.cleaned_data bekommen und nicht direkt von request.POST.)

Verwandte Themen