django - 在更新模型字段之前,如何确保输入的整数大于当前值?
问题描述
我正在使用一种保存到一个模型的表格来更新存储在另一个模型中的最新里程。我想确保输入的里程是 > 或 = 当前里程。我无法弄清楚正确的验证或在哪里编写验证。
我在 CreateView 的 form_valid() 和模型中的 save() 方法中尝试了 if 语句。
模型.py
class Vehicle(models.Model):
name = models.CharField(blank=True, max_length=100)
make = models.CharField(blank=True, max_length=100)
model = models.CharField(blank=True, max_length=100)
year = models.IntegerField(blank=True, null=True)
vin = models.CharField(blank=True, max_length=17)
gvw = models.IntegerField(blank=True, null=True)
license_plate = models.CharField(blank=True, max_length=100)
purchase_date = models.DateField()
current_mileage = models.IntegerField(blank=True, null=True)
class Meta:
ordering = ['name']
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('vehicles:vehicle_detail', kwargs={'pk':self.pk})
@property
def get_current_mileage(self):
return self.current_mileage
class FuelEntry(models.Model):
vehicle = models.ForeignKey(Vehicle, on_delete=models.CASCADE)
date = models.DateTimeField(auto_now_add=True)
fuel_choices = (
('EMPTY', 'Empty'),
('1/8', '1/8'),
('1/4', '1/4'),
('1/2', '1/2'),
('3/4', '3/4'),
('FULL', 'Full'),
)
current = models.CharField(max_length=5, choices=fuel_choices)
after = models.CharField(max_length=5, choices=fuel_choices, blank=True)
gallons = models.DecimalField(decimal_places=2, max_digits=5, blank=True, default='0')
cost = models.DecimalField(decimal_places=2, max_digits=5, blank=True, default='0')
mileage = models.IntegerField(blank=False)
user = models.ForeignKey(User, on_delete=models.CASCADE)
class Meta:
ordering = ['-date', 'vehicle']
def __str__(self):
return self.vehicle.name
def get_absolute_url(self):
return reverse('fuellog:entry_detail', kwargs={'pk':self.pk})
视图.py
class CreateEntry(CreateView):
model = FuelEntry
fields = ('vehicle', 'current', 'after', 'gallons', 'cost', 'mileage')
def form_valid(self,form):
self.object = form.save(commit=False)
self.object.user = self.request.user
vehicle_id = self.object.vehicle.pk
mileage = self.object.mileage
self.object.save()
current_mileage = Vehicle.objects.filter(id=vehicle_id).get('current_mileage')
if current_mileage > mileage:
raise ValidationError('Incorrect mileage reading')
Vehicle.objects.filter(id=vehicle_id).update(current_mileage=mileage)
return super().form_valid(form)
/fuel/new 处的 ValueError 太多值无法解包(预期为 2)
解决方案
推荐阅读
- r - 是否有任何内置的 R 函数来计算混合距离
- ios - Swift中滚动视图的旋转问题
- express - 关于使用嵌套对象的 express-validator 的问题
- flutter - 是否存在仅针对真实条件的合同形式?
- sympy - 在没有 `polar_lift` 的情况下进行集成
- java - Spring Boot 启用 HTTPS
- pandas - 具有大数据框的 PCA 图
- github - 不可能从
- tensorflow2.0 - AttributeError:“InteractiveSession”对象没有属性“小”
- javascript - 如何使障碍物撞到墙壁而不是穿过墙壁/Javascript,Html,CSS的障碍物