Django mod中接收到“NOT NULL constraint failed:home\u page.\u order”错误

2024-06-07 05:04:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直收到上面的错误,我仍然不确定我的代码的哪个组件违反了这个。下面是我的模型.py地址:

def get_image_path(instance, filename):
    return os.path.join('photos', str(instance.id), filename)


# Create your models here.
class Textbook(models.Model):
    founder = models.CharField(max_length=256)
    title = models.CharField(max_length=256)
    cover = models.ImageField(upload_to=get_image_path, blank=True, null=True)
    def __str__(self):
        return self.title

class Page(models.Model):

    textbook = models.ForeignKey(Textbook,related_name="pages",blank=True, null=True)
    page_title = models.CharField(max_length = 256,blank=True, null=True)
    page_num = IntegerRangeField(min_value=0,max_value=256, blank=True, null=True)

    def getTextID(self):
        return self.textbook.id

    def __str__(self):
        return self.page_title


    def iterSave(self):
        pages = self.textbook.pages
        MAX_PAGE = pages.aggregate(Max('page_num'))
        try:
            cpy = pages.get(page_num = self.page_num)
            for page in pages:
                if page.page_num >= self.page_num:
                    obj,created = Page.objects.update_or_create(page_title = page.page_title, page_num = page.page_num+1, textbook = page.textbook)
        except:
            if self.page_num > MAX_PAGE:
                obj,created = Page.objects.update_or_create(page_title = self.page_title, page_num = self.page_num+1, textbook = self.textbook)

    def save(self, *args,**kwargs):
        self.iterSave()
        super(Page,self).save(*args, **kwargs)

class Section(models.Model):
    page = models.ForeignKey(Page,related_name="sections")
    section_title = models.CharField(max_length=256)
    text = RichTextField(config_name='awesome_ckeditor')
    def __str__(self):
        return self.section_title

我知道这与查询函数有关,但我不确定是什么错误导致了这个错误。你知道吗

这是我的管理员.py如果有帮助:

admin.site.register(Section)
admin.site.register(Textbook)
admin.site.register(Page)

我有一个助手函数:

from django.db import models

class IntegerRangeField(models.IntegerField):
    def __init__(self, verbose_name=None, name=None, min_value=None, max_value=None, **kwargs):
        self.min_value, self.max_value = min_value, max_value
        models.IntegerField.__init__(self, verbose_name, name, **kwargs)
    def formfield(self, **kwargs):
        defaults = {'min_value': self.min_value, 'max_value':self.max_value}
        defaults.update(kwargs)
        return super(IntegerRangeField, self).formfield(**defaults)

还有我的视图.py地址:

def index(request):
    books = Textbook.objects.all()
    ret = {}
    for o in books:
        ret[o.id] = o
    ret['books'] = books
    return render(request,'index.html', ret)


def genpage(request, bid = -1, pid = 1):
    b = Textbook.objects.get(id = int(bid))
    page = b.pages.get(page_num = int(pid))
    sections = page.sections.all()
    if  b.pages.filter(page_num = page.page_num+1).exists():
        next_page = page.page_num+1
    else:
        next_page = -1
    if b.pages.filter(page_num = page.page_num-1).exists():
        prev_page = page.page_num-1
    else:
        prev_page = -1

    ret = {
        'prev_page':prev_page,
        'next_page':next_page,
        'book':b,
        'page_title': page.page_title,
        'sections': sections,

    }    

我很困惑,因为这是一个错误,我是如此陌生。这个错误是在页面的save函数中调用super时出现的,但除此之外我不知道该怎么办。你知道吗


Tags: nameselftruereturntitlevaluemodelsdef
1条回答
网友
1楼 · 发布于 2024-06-07 05:04:25

看起来好像您的ForeignKey在某一点上使用了^{},这就为您的模型添加了一个_order字段。你知道吗

既然已经删除了order_with_respect_to,就需要从数据库中删除该字段。希望创建一个新的迁移和迁移将解决这个问题。你知道吗

相关问题 更多 >