错误:404页面未找到.尝试更新表单后



目前我的Django应用程序有一个设置模型,它为程序的其余部分保存了一组设置。

我已经尝试创建一种方法来更新应用程序上的这些设置,按照下面的代码。

当更新按钮被点击,然而,应用程序返回一个页面未找到错误,而不是更新数据库。有人知道是什么原因导致的吗?因为我似乎在代码中找不到任何错误。

Views.py:

def viewSettings(request,  settings_pk):
setting = get_object_or_404(SettingsClass, pk=settings_pk)
if request.method == 'GET':
form = SettingUpdateForm(instance=setting)
return render(request, 'main/viewSettings.html', {'setting': setting, 'form':form})
else:
try:
form =  SettingUpdateForm(request.POST, instance=setting)
form.save()
return redirect('settingsHome')
except ValueError:
return render(request, 'main/viewSettings.html', {'setting': setting, 'form':form, 'error':'Bad info'})

Models.py:

class SettingsClass(models.Model):
Complex = models.CharField(choices=complex_list , max_length =  22 ,default='1' , unique=True)
#Trial Balance Year To Date
Trial_balance_Year_to_date= models.BooleanField(default = False)
tbytd_Include_opening_balances=models.BooleanField(default = False)
tbytd_Only_use_main_accounts=models.BooleanField(default = False)
tbytd_Print_null_values=models.BooleanField(default = False)
tbytd_Print_description=models.BooleanField(default = True)
tbytd_Print_account=models.BooleanField(default = True)
tbytd_Sort_by_account_name=models.BooleanField(default = True)
#Trial Balance Monthly
Trial_balance_Monthly=models.BooleanField(default = False)
tbm_Only_use_main_accounts=models.BooleanField(default = False)
tbm_Print_null_values=models.BooleanField(default = False)
tbm_Print_description=models.BooleanField(default = True)
tbm_Print_account=models.BooleanField(default = True)
tbm_Sort_by_account_name=models.BooleanField(default = True)
#Income Statement Year To Date
Income_Statement_Year_to_date=models.BooleanField(default = False)
isytd_Only_use_main_accounts=models.BooleanField(default = False)
isytd_Sort_by_account_name=models.BooleanField(default = True)
isytd_Print_null_values=models.BooleanField(default = False)
isytd_Print_description=models.BooleanField(default = True)
isytd_Print_account=models.BooleanField(default = True)
#Income Statement Monthly
Income_Statement_Monthly=models.BooleanField(default = False)
ism_Only_use_main_accounts=models.BooleanField(default = False)
ism_Sort_by_account_name=models.BooleanField(default = True)
ism_Print_null_values=models.BooleanField(default = False)
ism_Print_description=models.BooleanField(default = True)
ism_Print_account=models.BooleanField(default = True)
#Age Analysis
Age_Analysis=models.BooleanField(default = False)
aa_Include_all_customers=models.BooleanField(default = True)
aa_Include_cash_customers=models.BooleanField(default = True)
aa_include_on_hold_customers=models.BooleanField(default = True)
aa_include_null_values=models.BooleanField(default = False)
aa_allocate_unalocated_credits_to_oldest=models.BooleanField(default = True)
#Balance Sheet
Balance_Sheet=models.BooleanField(default = False)
bs_Only_use_main_accounts=models.BooleanField(default = False)
bs_Print_current_month=models.BooleanField(default = True)
bs_Include_null_values=models.BooleanField(default = False)
bs_Print_assets_first=models.BooleanField(default = True)
bs_statement_of_financial_position=models.BooleanField(default = False)
#Repair and Maintenance General Ledger
Repair_and_Maintenance_General_Ledger=models.BooleanField(default = False)
rmgl_Ignore_inactive_accounts=models.BooleanField(default = True)
rmgl_Sort_by_transaction_date=models.BooleanField(default = True)
rmgl_Group_by_account_type=models.BooleanField(default = True)
rmgl_Print_description=models.BooleanField(default = True)
rmgl_Print_account=models.BooleanField(default = True)
rmgl_Print_year_to_date=models.BooleanField(default = True)
rmgl_Print_monthly=models.BooleanField(default = False)
#Major Capital Items General Ledger
Major_capital_Items_General_Ledger=models.BooleanField(default = False)
mcigl_Ignore_inactive_accounts=models.BooleanField(default = True)
mcigl_Sort_by_transaction_date=models.BooleanField(default = True)
mcigl_Group_by_account_type=models.BooleanField(default = True)
mcigl_Print_description=models.BooleanField(default = True)
mcigl_Print_account=models.BooleanField(default = True)
mcigl_Print_year_to_date=models.BooleanField(default = True)
mcigl_Print_monthly=models.BooleanField(default = False)
def __str__(self):
return (self.Complex + ' Settings')

Forms.py:

class SettingsForm(ModelForm):
class Meta:
model = SettingsClass
fields = ('Complex','Trial_balance_Year_to_date' , 'Trial_balance_Monthly' , 'Income_Statement_Year_to_date' , 'Income_Statement_Monthly' , 'Age_Analysis' , 'Balance_Sheet' , 'Repair_and_Maintenance_General_Ledger' , 'Major_capital_Items_General_Ledger')
class SettingUpdateForm(ModelForm):
class Meta:
model = SettingsClass
fields = '__all__'

ViewSettings.html:

{% extends "main/base.html"%}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.0/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-wEmeIV1mKuiNpC+IOBjI7aAzPcEZeedi5yW5f2yOq55WWLwNGmvvx4Um1vskeMj0" crossorigin="anonymous">

{% block content %}

{{ error }}

<h2 style="text-align: center">{{ setting.Complex }}</h2>
<hr>
<br>
<form method="POST" action="{ url 'settingsHome' settings.pk }">
{% csrf_token %}
<div class="container">
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Trial_balance_Year_to_date }} Trial Balance Year To Date</li>
<li class='list-group-item'>{{ form.tbytd_Include_opening_balances }} Include Opening Balances</li>
<li class='list-group-item'>{{ form.tbytd_Only_use_main_accounts }} Only Use Main Accounts</li>
<li class='list-group-item'>{{ form.tbytd_Print_null_values }} Print 0.00 Values</li>
<li class='list-group-item'>{{ form.tbytd_Print_description }} Print Description</li>
<li class='list-group-item'>{{ form.tbytd_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.tbytd_Sort_by_account_name }} Sort By Account Name</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Trial_balance_Monthly }} Trial Balance Monthly</li>
<li class='list-group-item'>{{ form.tbm_Only_use_main_accounts }} Only Use Main Accounts</li>
<li class='list-group-item'>{{ form.tbm_Print_null_values }} Print 0.00 Values</li>
<li class='list-group-item'>{{ form.tbm_Print_description }} Print Description</li>
<li class='list-group-item'>{{ form.tbm_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.tbm_Sort_by_account_name }} Sort By Account Name</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Income_Statement_Monthly }} Income Statement Monthly</li>
<li class='list-group-item'>{{ form.ism_Only_use_main_accounts }} Only Use Main Accounts</li>
<li class='list-group-item'>{{ form.ism_Print_null_values }} Print 0.00 Values</li>
<li class='list-group-item'>{{ form.ism_Print_description }} Print Description</li>
<li class='list-group-item'>{{ form.ism_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.ism_Sort_by_account_name }} Sort By Account Name</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Income_Statement_Year_to_date }} Income Statement Year To Date</li>
<li class='list-group-item'>{{ form.isytd_Only_use_main_accounts }} Only Use Main Accounts</li>
<li class='list-group-item'>{{ form.isytd_Print_null_values }} Print 0.00 Values</li>
<li class='list-group-item'>{{ form.isytd_Print_description }} Print Description</li>
<li class='list-group-item'>{{ form.isytd_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.isytd_Sort_by_account_name }} Sort By Account Name</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Age_Analysis }} Age Analysis</li>
<li class='list-group-item'>{{ form.aa_Include_all_customers }} Include All Customers</li>
<li class='list-group-item'>{{ form.aa_include_null_values }} Print 0.00 Values</li>
<li class='list-group-item'>{{ form.aa_include_on_hold_customers }} Include On Hold Customers</li>
<li class='list-group-item'>{{ form.aa_Include_cash_customers }} Include Cash Customers</li>
<li class='list-group-item'>{{ form.aa_allocate_unalocated_credits_to_oldest }} Allocate Unalocated Credits To Oldest Records</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Balance_Sheet }} Balance Sheet</li>
<li class='list-group-item'>{{ form.bs_Only_use_main_accounts }} Only Use Main Accounts</li>
<li class='list-group-item'>{{ form.bs_Print_current_month }} Print The Current Month (Otherwise prints year to date)</li>
<li class='list-group-item'>{{ form.bs_Include_null_values }} Include 0.00 values</li>
<li class='list-group-item'>{{ form.bs_Print_assets_first }} Print Assets First</li>
<li class='list-group-item'>{{ form.bs_statement_of_financial_position }} Statement Of Financial Position</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Repair_and_Maintenance_General_Ledger }} Repair And Maintenance General Ledger</li>
<li class='list-group-item'>{{ form.rmgl_Ignore_inactive_accounts }} Ignore Inactive Accounts</li>
<li class='list-group-item'>{{ form.rmgl_Sort_by_transaction_date }} Sort By Transaction Date</li>
<li class='list-group-item'>{{ form.rmgl_Group_by_account_type }} Group By Account Type</li>
<li class='list-group-item'>{{ form.rmgl_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.rmgl_Print_year_to_date }} Print Year To Date (Otherwise prints for the current month)</li>
</ul>
<br>
<ul class='list-group'>
<li class='list-group-item active'>{{ form.Major_capital_Items_General_Ledger }} Repair And Maintenance General Ledger</li>
<li class='list-group-item'>{{ form.mcigl_Ignore_inactive_accounts }} Ignore Inactive Accounts</li>
<li class='list-group-item'>{{ form.mcigl_Sort_by_transaction_date }} Sort By Transaction Date</li>
<li class='list-group-item'>{{ form.mcigl_Group_by_account_type }} Group By Account Type</li>
<li class='list-group-item'>{{ form.mcigl_Print_account }} Print Account</li>
<li class='list-group-item'>{{ form.mcigl_Print_year_to_date }} Print Year To Date (Otherwise prints for the current month)</li>
</ul>
</div>
<br>
<br>
<hr>
<div class="btn-update" style="padding-left: 1%">
<button type="submit" class='btn btn-primary'>Update</button>
<button type="delete" class="btn btn-danger">Delete</button>
</div>
</form>

{% endblock %}

urls . py:

from django.contrib import admin
from django.conf.urls import url
from django.urls import path , include
from accounts import views as v
from main import views as views
urlpatterns = [
path('admin/', admin.site.urls),
# Accounts
path('login/home/' , views.home , name = 'home'),
path('', v.register , name='register'),
path('' , include('django.contrib.auth.urls') , name = 'login'),
#Trial Balance
path('KyletrbSettings' , views.KyletrbSettings , name = 'KyletrbSettings'),
path('Kyletrb', views.Kyletrb , name = 'Kyletrb'),
path('KyletrbMonth', views.KyletrbMonth , name = 'KyletrbMonth'),
path('pdf' , views.printToPdf, name='printToPdf'),
path('XLS' , views.printToXLS , name='printToXLS'),
path('trb_Monthly' , views.trb_Monthly , name='trb_Monthly')
#Settings
path('settings', views.settingsHome , name='settingsHome'),
path('ns' , views.newSetting , name='newSetting'),
path('accConnect/setting/<int:settings_pk>', views.viewSettings, name='viewSettings' ),
]

改变这一行

<form method="POST" action="{ url 'settingsHome' settings.pk }">

<form method="POST" action="{ url 'viewSettings' settings.pk }">

,因为你正在重定向表单提交到一个错误的视图,而不是你正在更新设置对象的视图。

最新更新