2016-09-05 3 views
0

Python 3.5.1 Django 1.10Джанго: Невозможно открыть подробный вид на URL, который вызывает обратные ошибки аргументов в другой точке зрения

Been разрывают мои волосы в течение нескольких часов, но возлагали мой Reverse ошибка Довод вплоть до фактической проблемы.

Когда я пытаюсь открыть форму для редактирования конкретной записи в моей модели, она открывает только пустую (несвязанную) форму. Используя ту же логику, я могу удалить запись, поэтому я уверен, что это нечто глупое. Но я слишком много часов в этом, поэтому я был бы признателен за спасение.

От models.py

class CmsSpaces(models.Model): 
sid = models.AutoField(db_column='SID', primary_key=True) 
section = models.CharField(db_column='Section', max_length=5) 
...Many more columns... 

def __unicode__(self): 
    return self.name 

def get_absolute_url(self): 
    return reverse('cms_spaces:space_edit', args = (self.sid), kwargs=None) 
    return reverse('cms_spaces:space_delete', args = (self.sid), kwargs=None) 
    return reverse('cms_spaces:space_new', args = None, kwargs = None) 

class Meta: 
    managed = False 
    db_table = 'cms_spaces' 

От views.py

def CmsSpaces_update(request, sid, 
template_name='space_edit.html'): 
    space = get_object_or_404(CmsSpaces, sid=sid) 
    form = space_form(request.POST or None, instance=space) 
    if form.is_valid(): 
     form.save() 
     return redirect('space_list') 
    return render(request, template_name, {'form':space_form}) 

def CmsSpaces_delete(request, sid, 
template_name='space_delete.html'): 
    space = get_object_or_404(CmsSpaces, sid=sid)  
    if request.method=='POST': 
     space.delete() 
     return redirect('space_list') 
    return render(request, template_name, {'object':CmsSpaces}) 

От urls.py

from django.conf import settings 
from django.conf.urls import include, url 
from django.contrib import admin 
from cms_spaces import views 

urlpatterns = [ 
    url(r'^space_list/$', views.CmsSpaces_list, name='space_list'), 
    url(r'^space_new/$', views.CmsSpaces_create, name='space_new'), 
    url(r'^space_edit/(?P<sid>[\w-]+)/$', views.CmsSpaces_update, name='space_edit'), 
    url(r'^space_delete/(?P<sid>[\w-]+)/$', views.CmsSpaces_delete, name='space_delete'), 
] 

От space_edit.html. Когда я ввожу url непосредственно для .../space_delete/12345, он продолжает удаление записи с помощью sid = 12345.

<form method="post">{% csrf_token %} 
    {{ form.as_p }} 
    <input type="submit" value="Add or Update Space" /> 
</form> 

От space_list.html (который бросает "Reverse 'для space_edit' с аргументами '(10256,)' и именованных аргументов '{}' не найден 0 шаблон (ы) пробовал:. []"), Как ошибка. 10256 фактически является sid для одной из записей в таблице. Когда я удаляю ссылки на space_edit и space_delete, он отображает список записей. Да, есть еще много строк кода, которые обрабатывают презентацию, но это откидная версия, и она «сломана» даже на этом уровне.

<ul> 
    {% for CmsSpaces in space_list %} 
    <li>{{CmsSpaces.sid}} {{ CmsSpaces.section }} {{ CmsSpaces.space}} {{ CmsSpaces.lot }} {{ CmsSpaces.deednum}} 
    <a href="{% url 'space_edit' CmsSpaces.sid %}">edit</a> 
    <a href="{% url 'space_delete' CmsSpaces.sid %}">delete</a> 
    </li> 
    {% endfor %} 
</ul> 

Все, что я хочу сделать, это позвонить и отредактировать запись. Если я смогу это сделать, я верю, что просмотр списка будет работать, и тогда я буду на пути домой. Проблема заключается в том, что, хотя она правильно захватывает sid, она не может правильно передать ее в качестве аргумента модели. Помогите! Благодарю.

EDIT

from django import forms 
from django.forms import ModelForm 
from masterdata.models import CmsSpaces 

class space_form(ModelForm): 
    class Meta: 
     model = CmsSpaces 
     fields = [ 
     'sid', 
     'section', 
     'space', 
     'lot', 
     'deednum', 
     'purchdate', 
     'notes', 
     'perpetualcare', 


     ] 
+0

Я сожалею, что у меня нет для вас решение, но хотелось бы отметить, что-то : кажется, что плохая идея удалась, просто набрав URL-адрес. Возможно, это то, что вы хотите, но если я ошибаюсь, удаление по URL не должно быть возможным, если ваш запрос должен быть «POST» для удаления. – elethan

+0

Предоставлено. Это была разорванная и лишенная версии. Я хотел устранить как можно больше кода, сохраняя при этом ошибку. Процесс устранения. – Craig

+0

Got it. Надеюсь, вы разобрались! – elethan

ответ

0

Хорошо ... первый от большой благодаря @knbk для получения меня на трассе с вопросом списка.

Во-вторых, мой первоначальный диагноз в ОП был неправильным. Проблема была в моем представлении CmsSpaces_update. Свернувшись, в представлении были фигуры, чтобы привязать форму к записи, но никакого фактического кода для этого не было. пощечины голова

так, потому что кто-то может когда-нибудь прочитать это и интересно, то же самое ...

def CmsSpaces_update(request, sid, 
template_name='templates/space_edit.html'): 
    space = get_object_or_404(CmsSpaces, sid=sid) 
    form = space_form(request.POST or None, instance=space) 
    if form.is_valid(): 
     form.save() 
     return redirect('space_list') 
    ctx = {} 
    ctx['form'] = form 
    ctx['space'] = space 
    return render(request, template_name, ctx) 
Смежные вопросы