python - 尝试实现 Django Admin 模型验证
问题描述
我是一个初学者,正在尝试在 Django 中实现出价系统。我希望它同时在 Django 管理页面和模板上工作,因此我在 Admins.py 中创建了 modelform 和 modeladmin。
模型.py:
from django.contrib.auth.models import AbstractUser
from django.db import models
class User(AbstractUser):
pass
class category(models.Model):
category = models.CharField(max_length=50, default='SOME STRING')
def __str__(self):
return f"{self.category}"
class bid(models.Model):
listing = models.ForeignKey('listing', on_delete=models.CASCADE)
user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
bid = models.DecimalField(max_digits=6, null=True, decimal_places=2)
def __str__(self):
return f"{self.user}, {self.listing} {self.bid}"
class listing(models.Model):
user = models.ForeignKey(User, null=True, on_delete=models.CASCADE)
Title = models.CharField(max_length=50)
Description = models.CharField(max_length=300)
Price = models.DecimalField(max_digits=6, null=True, decimal_places=2)
category = models.ForeignKey(category, on_delete=models.CASCADE, related_name="categories")
def __str__(self):
return f"{self.Title}"
管理员.py
from django.contrib import admin
from .models import User, listing, category, bid
from django.core.exceptions import ValidationError
from django import forms
admin.site.register(User)
admin.site.register(listing)
admin.site.register(category)
class bidForm(forms.ModelForm):
class Meta:
model=bid
fields = ['user', 'listing', 'bid']
def clean(self):
start_price = self.cleaned_data.get('listing.Price')
userbid = self.cleaned_data.get('bid')
if userbid <= start_price:
raise ValidationError('Please place a bid higher than starting price')
return self.cleaned_data
class bidAdmin(admin.ModelAdmin):
form = bidForm
list_display = ('user', 'listing', 'bid')
admin.site.register(bid, bidAdmin)
它返回以下错误:'decimal.Decimal' 和'NoneType' 的实例之间不支持'<='。此外,我想比较列表中先前和当前出价的实例以提出新的出价,还要修改任何先前出价,即使它低于最高出价。但我不知道如何编码。请帮我...
解决方案
推荐阅读
- drupal - “file_save_data”中的 FILE_EXISTS_RENAME 有时不会重命名现有文件名,并且会为“file_managed”条目中的重复条目引发错误
- c++ - 使用 glDrawElements 绘制 std::vector
- python - 用 '#' 后跟数字分割字符串
- presto - Presto中各种内存的解释清楚
- firebase - 谁能建议我如何手动(而不是通过编程)将图像存储到firebase的存储部分?
- python - 检查 Gmail 帐户以跟踪使用 Python 的空间百分比
- wordpress - Wordpress,导航到产品页面时如何修复弹出窗口?
- android - MediaPlayer 突然停止播放
- c# - 数据未通过 SQLDataAdapter 加载到 GridView
- java - 在java中创建另一个类的对象时找不到符号错误而没有仅在windows中扩展