- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在 Django 中创建一个汽车预订应用程序。用户可以为给定的汽车创建预订。这发生在 /reservation/<car_id>/add
.此表单不包含 Car 字段,因为 id 在 URL 中给出。现在我想向 Reservation 模型添加验证,这样预订就不会重叠。我有以下代码(最小版本):
# models.py
class Car(models.Model):
name = models.CharField(max_length=200)
class Reservation(models.Model):
car = models.ForeignKey(Car, on_delete=models.CASCADE)
owner = models.ForeignKey(User, on_delete=models.CASCADE)
start_time = models.DateTimeField()
end_time = models.DateTimeField()
def clean(self):
# Check if overlaps with other reservations in self.car.reservation_set
# views.py
class ReservationAdd(LoginRequiredMixin, CreateView):
template_name = 'reservation/reservation_add.html'
model = Reservation
form_class = ReservationAddForm
def form_valid(self, form):
form.instance.car = Car.objects.get(pk=self.kwargs['car_id'])
form.instance.owner = self.request.user
return super().form_valid(form)
# forms.py
class ReservationAddForm(forms.ModelForm):
class Meta:
fields = ('start_time', 'end_time')
model = Reservation
现在我在 Reservation.clean
收到以下错误方法:
reservation.models.Reservation.car.RelatedObjectDoesNotExist: Reservation has no car.
在我看来 clean
方法在 form_valid
之前被调用方法。所以我认为我的设计并不完全正确。执行此操作的正确方法是什么?
最佳答案
是的。 form_valid
表示“表单被确认为有效后运行的代码”。
您需要进行一些更改。首先,将验证移至 ReservationAddForm 本身;其次,将 Car 实例传递到该表单中。所以:
class ReservationAddForm(forms.ModelForm):
class Meta:
fields = ('start_time', 'end_time')
model = Reservation
def __init__(self, *args, **kwargs):
self.car = kwargs.pop('car')
super().__init__(*args, **kwargs)
def clean(self):
... do something with self.car
class ReservationAdd(LoginRequiredMixin, CreateView):
template_name = 'reservation/reservation_add.html'
model = Reservation
form_class = ReservationAddForm
def get_form_kwargs(self):
self.car = Car.objects.get(pk=self.kwargs['car_id'])
kwargs = super().get_form_kwargs()
kwargs['car'] = self.car
return kwargs
def form_valid(self, form):
form.instance.car = self.car
form.instance.owner = self.request.user
return super().form_valid(form)
关于python - Django:form_valid 和模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56186730/
我的 CodeIgniter 应用程序中有一个表单验证代码: $this->load->library('form_validation'); $this->form_validation->set_
我是 CodeIgniter 的新手,我对 form_validation 有疑问: 我创建了一个 Controller 来进行身份验证,这是我的 Controller ===============
我正在 Django 中创建一个汽车预订应用程序。用户可以为给定的汽车创建预订。这发生在 /reservation//add .此表单不包含 Car 字段,因为 id 在 URL 中给出。现在我想向
我正在 Django 中创建一个汽车预订应用程序。用户可以为给定的汽车创建预订。这发生在 /reservation//add .此表单不包含 Car 字段,因为 id 在 URL 中给出。现在我想向
我是 django 的新手。任何人都可以帮我这个代码。我正在尝试计算 2 个 DateField 之间的持续时间,然后保存。 class EmployeeCreate(CreateView):
Codeigniter 问题: 我刚刚使用 $this->form_validation->set_rules(etc etc) 设置了我的第一个表单,在验证运行正确后,我应该使用 $email =
我的表单验证错误停止工作,它昨天还在工作,我一定是做错了什么但似乎找不到它。 当我填写用户名和电子邮件地址时,它会发送电子邮件并回显“电子邮件已发送!”。 当我只是点击注册而不填写任何信息时,它只是重
我的脚本无法加载 form_validation 类。 我从 autoload.php 调用它, Controller 的 _construct 方法和我打算使用的方法(即 login() 方法) a
我想做的很简单(我希望如此): 我正在尝试使用 Form_Validation 验证 POST 数据(或通过 variable 提供的任何数据)。 问题是要运行实际验证我/我们需要做 if ($thi
我想使用 form_validation 类验证输入,这将允许我在字段中输入数字或空值。 像这样: $this->form_validation->set_rules('field[]','The f
我正在尝试使用 Django 在发布应用程序上制作评论表单,问题是我似乎无法获得它自己的对象 ID,知道吗? #views.py class MyFormView(FormView): for
Codeigniters form_validation 很棒,但是我需要一个专门的自定义过滤器 alpha space dash and apostrophe/single quote 但是..他们
在我的 CreateView我正在覆盖 form_valid() 的类功能如下: class ActionCreateView(CreateView): model = Action
返回行上的这个表单对象是什么,它是提交表单收到的表单对象吗? .因为我们用 return super().form_valid(form) 返回它。 它可以像上下文变量一样访问吗?从由 success
我目前正在尝试将我的应用程序从 MySQL 数据库更改为 MongoDB 数据库。我的项目需要比较其中的两个,而我的 MySQL 代码正在运行,现在它给了我这个错误。 堆栈跟踪: A PHP Erro
我创建了一个表单,它是 forms.ModelForm。在“ View ”方面,我创建了一个 generic.UpdateView View 。 在这两个不同的类中,一侧有 is_valid(),另一
我正在尝试向我的数据库添加一条记录并验证我的表单。但是我的 form_validation 总是返回 false。 这是我的看法。我正在使用模式来保存此表单。 "> First
我编辑了以下代码,以使其与我所做的更改保持同步。我已成功保存它但是,当重定向完成时,我仍然无法显示“成功”消息。另外,如果出现不正确错误,我该如何保存输入的数据? Controller class A
在 django 表单中,为了保存其他数据,我通常使用 form_valid()但我也可以使用 save()表单类的方法。 今天我覆盖了save()而不是 form_valid()我的manytoma
自定义 form_valid() 函数内处理错误的“正确”方法是什么? 例如我有一个定义了 form_valid() 方法的 View : class StorageItemMergeView(For
我是一名优秀的程序员,十分优秀!