- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我已经为此绞尽脑汁两天了,希望有人能帮助我弄清楚我错过了什么。
我之前可以提交,但更改了一些内容,但我不知道是什么。
当我尝试添加新客户端时,页面只是重新加载,什么也不做。
但是当我去编辑已经创建的一个(使用管理控制台)时,它会按预期工作。
模型.py
from django.urls import reverse
from django.db.models import CharField
from django.db.models import DateTimeField
from django.db.models import FileField
from django.db.models import IntegerField
from django.db.models import TextField
from django.conf import settings
from django.contrib.contenttypes.fields import GenericForeignKey
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth import get_user_model
from django.contrib.auth import models as auth_models
from django.db import models as models
from django.contrib.auth.models import User
from django_extensions.db import fields as extension_fields
FINANCING_TYPE = (
('LoanPal', 'LoanPal'),
('Renew', 'Renew'),
('GreenSky', 'GreenSky'),
('Cash/Card/Check', 'Cash/Card/Check'),
('Other', 'Other - Please Note'),
)
ROOF_TYPE = (
('Cement Flat', 'Cement Flat'),
('Cement S/W', 'Cement S/W'),
('Composite', 'Composite'),
('Clay', 'Clay'),
('Metal', 'Metal'),
('Other', 'Other - Please Note'),
)
JOB_STATUS = (
('New', 'New'),
('Sent to Engineer', 'Sent to Engineer'),
('Installer', 'Installer'),
('Completed', 'Completed'),
)
class Client(models.Model):
# Fields
sales_person = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
job_status = models.CharField(max_length=30, choices=JOB_STATUS, default="New")
created = models.DateTimeField(auto_now_add=True, editable=False)
last_updated = models.DateTimeField(auto_now=True, editable=False)
first_name = models.CharField(max_length=100)
last_name = models.CharField(max_length=100)
street_address = models.CharField(max_length=100)
city = models.CharField(max_length=100)
zipcode = models.CharField(max_length=10)
phone_number = models.CharField(max_length=16)
email_address = models.CharField(max_length=100)
financing_type = models.CharField(max_length=30, choices=FINANCING_TYPE)
contract_amount = models.IntegerField()
contract_pdf = models.FileField(upload_to="upload/files/contracts/")
electric_bill = models.FileField(upload_to="upload/files/electric_bills/")
roof_type = models.CharField(max_length=30, choices=ROOF_TYPE)
edge_of_roof_picture = models.ImageField(verbose_name="Picture of Roof Edge", upload_to="upload/files/edge_of_roof_pictures/")
rafter_picture = models.ImageField(verbose_name="Picture of Rafter/Truss", upload_to="upload/files/rafter_pictures/")
biggest_breaker_amp = models.IntegerField()
electric_panel_picture = models.ImageField(verbose_name="Picture of Electrical Panel", upload_to="upload/files/electric_panel_pictures/")
electric_box_type = models.CharField(verbose_name="Top or bottom fed electric box (is there an overhead line coming in? Can you see where the electric line comes in?)", max_length=100)
main_panel_location = models.CharField(verbose_name="Main panel location (looking at house from street)", max_length=100)
additional_notes = models.TextField(verbose_name="Any Additional Notes?", blank=True)
customer_informed = models.BooleanField(verbose_name="Informed customer plans and placards will be mailed to them and make them available install day")
class Meta:
ordering = ('-created',)
def get_absolute_url(self):
return reverse('sales_client_detail', args=[str(self.id)])
def __str__(self):
return self.street_address
View .py
from django.views.generic import DetailView, ListView, UpdateView, CreateView
from .models import Client
from .forms import ClientForm
from django.contrib.auth.mixins import LoginRequiredMixin
from django.shortcuts import get_object_or_404
from django.urls import reverse_lazy
class ClientListView(LoginRequiredMixin,ListView):
model = Client
def get_queryset(self):
if not self.request.user.is_staff:
return Client.objects.filter(sales_person=self.request.user)
else:
return Client.objects.all()
class ClientCreateView(LoginRequiredMixin,CreateView):
form_class = ClientForm
model = Client
class ClientDetailView(LoginRequiredMixin,DetailView):
model = Client
# def get_object(self):
# if not self.request.user.is_staff:
# return get_object_or_404(Client, sales_person=self.request.user)
# else:
# queryset = self.get_queryset()
# obj = get_object_or_404(queryset)
# return obj
class ClientUpdateView(LoginRequiredMixin,UpdateView):
model = Client
form_class = ClientForm
表单.py
from django import forms
from .models import Client
class ClientForm(forms.ModelForm):
class Meta:
model = Client
fields = ['first_name', 'last_name', 'street_address', 'city', 'zipcode',
'phone_number', 'email_address', 'financing_type', 'contract_amount',
'contract_pdf', 'electric_bill', 'roof_type', 'edge_of_roof_picture',
'rafter_picture', 'biggest_breaker_amp', 'electric_panel_picture',
'electric_box_type', 'main_panel_location', 'additional_notes', 'customer_informed']
url.py
from django.urls import path, include
from . import views
urlpatterns = (
# urls for Client
path('clients/', views.ClientListView.as_view(), name='sales_client_list'),
path('client/create/', views.ClientCreateView.as_view(), name='sales_client_create'),
path('client/view/<int:pk>', views.ClientDetailView.as_view(), name='sales_client_detail'),
path('client/update/<int:pk>', views.ClientUpdateView.as_view(), name='sales_client_update'),
)
client_form.html
{% extends "base.html" %}
{% load static %}
{% load crispy_forms_tags %}
{% block content %}
<form method="POST">
{% csrf_token %}
{{form|crispy}}
<button class="btn btn-primary" type="submit">Submit</button>
</form>
{% endblock %}
最佳答案
我能够通过 irc.Freenode.net 从 #Django 上的 GinFuyou 获得帮助
问题是我需要在 client_form.html 上设置 enctype="multipart/form-data"
整行应该是
<form enctype="multipart/form-data" method="POST">
这是由于将文件上传到表单所致。
关于python - CreateView 未在提交时保存,但在 UpdateView 上保存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54998602/
我正在学习 Django,我在从 CreateView 重定向回来时遇到问题 我想重定向到 BookDetail 页面,其中包含由 CreateView 创建的 bookinstances 列表。模型
假设我们有一个名为 Closet 的应用程序,它有一些模型: # closet.models.py class Outfit(models.Model): shirt = models.
我如何在 Django 的 Createview 中声明一个变量,以便我可以从它的模板中使用它? 例如我想在模板中使用 {{ place_slug }} 。我从 urls.py 传递它,如下所示: 网
我正在尝试在我的 Django 1.8 应用程序中实现通用 View ,以便 Django 可以为我处理验证/重定向循环。 我已经创建了一个模型: class Customer(models.Mode
我有一个这样的模型: class Appointment(models.Model): user = models.ForeignKey(User) engineer = models
我正在开发一个包含章节的项目,每个章节都有标题、内容和顺序。我想保留字段“顺序”的命名,但将该字段显示在 CreateView 中作为其他内容,例如“章节号”。我发现的最佳信息建议更新 Meta 类中
型号: class MyModel(model.Models) status = models.ForeignKey(Statuses, on_delete=models.PROTECT, nu
我创建了一个Form ,其中用户设置 Alarm目的。 Alarm对象按预期保存到数据库中。然而问题是:另一个对象,它只包含 Form 中填写的信息。 ,也保存到数据库。 据我了解,form_vali
我有两个串联的表格。基本上用户填写第一个表单,然后被重定向到第二个表单,第二个表单为第一个表单的数据增加值(value)。例如。我有一个表单电影(第一个表单),然后我被重定向到将 Actor 添加到电
我想在绘制后获取布局的宽度和高度。 我的代码实际上是在createView()方法中调用的。但我想等到布局绘制完成后再执行这段代码: Log.i(TAG, "Height: "+myButton.ge
我有 2 个模型,Father 和 Son。 我有一个注册父亲的页面。在同一页面上,我有一个用于注册 Son 的表单集。 页面上有一个“更多”按钮,用于在同一页面上添加另一个Father 和他们各自的
使用 CreateView 类,我想保存多个数据条目。 输入示例: 项目是“苹果、香蕉、胡萝卜” 位置是“位置 1” 我想像这样将它们保存到数据库中: [苹果,位置 1] [香蕉,位置 1] [胡萝卜
我有这个模型,我需要的是唯一的时间,因为它是一个预订,所以当我创建一个新的预订时,我如何检查那个时间是否已经被选择。 模型.py class Reserva(models.Model): ho
在这里,我使用 CreateView 创建项目,然后我重定向用户以更新当前创建的对象的其他字段。 这是我的代码: Views.py class DynamicCreate(CreateView):
这是我第一次真正使用 Django (1.6),我一直无法弄清楚: 我试图将 CreateView 上的下拉列表限制为仅显示在项目模型中具有事件状态 (2) 的项目: class ProjectSta
我正在尝试实现一个预约应用程序,用户可以在其中创建与预先存在的类相关联的 session 。我想要做的是使用 django CreateView 创建一个 session ,而不要求用户提供关联的类,
Django FormView 和 CreateView 有什么区别? 我看到的唯一区别是,FormView 需要 ModelForm 但 CreateView 不需要。 否则,两者都会做同样的事情来
我正在尝试采用一种使用 Django-Crispy-Forms 布局功能保存带有主表单的嵌套表单集的方法,但我无法保存它。我正在关注this代码示例项目,但无法验证表单集以保存数据。如果有人能指出我的
我正在使用自定义的CreateView(CourseCreate)和UpdateView(CourseUpdate)保存和更新类(class)。保存类(class)后,我想采取措施。我将在新类(cla
在我看来.py: class DatasetRequestCreateView(CreateView): model = DatasetRequest form_class = Dat
我是一名优秀的程序员,十分优秀!