首页 > 解决方案 > 尝试实现 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' 的实例之间不支持'<='。此外,我想比较列表中先前和当前出价的实例以提出新的出价,还要修改任何先前出价,即使它低于最高出价。但我不知道如何编码。请帮我...

标签: pythondjangodjango-modelsdjango-templates

解决方案


推荐阅读