在更改models.py

时间:2020-06-17 07:20:13

标签: django django-models

当我尝试通过django admin打开此数据库时,我不断收到此错误

异常类型:/ admin / tasks / task /中的OperationalError 异常值:无此类列:task_task.task_name_id

最初,我在已经存储了一些对象的模型中更改了很多字段。现在我无法回头了,所以我启动了一个新应用,并从旧应用中复制了所有文件,就像它们在同一项目中一样。删除旧应用程序,并用旧应用程序的名称重命名新应用程序,以便在项目中出现问题的地方都不会出现任何问题。

但是现在每当我尝试迁移时,都会出现此错误:

File "C:\Users\sarda\anaconda3\envs\myDjangoEnv\lib\site-packages\django\db\backends\sqlite3\base.py", line 326, in check_constraints
    raise utils.IntegrityError(
django.db.utils.IntegrityError: The row in table 'tasks_task' with primary key '1' has an invalid foreign key: tasks_task.task_name_id cont
ains a value 'task_name_id' that does not have a corresponding value in tasks_task_list.id.

models.py:

from django.db import models
import datetime
from django.utils import timezone
class Task_List(models.Model):
    task_name=models.CharField(max_length=100)
    c1=models.CharField(max_length=30, default="OTHER")
    c2=models.CharField(max_length=30, default="OTHER")
    c3=models.CharField(max_length=30, default="OTHER")
    time_esc=models.IntegerField(default=1)

    def __str__(self):
        return self.task_name

class Task_manager(models.Manager):
    def create_Task(self, title,deadline):
        Task1 = self.create(title=title,deadline=deadline)
        # do something with the book
        return Task1  
class Task(models.Model):
    STATUS = (
       ('ONGOING', 'ONGOING'),
       ('COMPLETED','COMPLETED'),
       ('PENDING','PENDING' ),
       ('FINISHED','FINISHED')
   )

    task_name=models.ForeignKey(Task_List, on_delete=models.SET_NULL, null=True)
    title=models.CharField(max_length=30,default="Other", blank=True)
    created=models.DateTimeField(auto_now_add=True)
    deadline_fixed=models.DateTimeField(default=timezone.now())
    deadline=models.DateTimeField(default=timezone.now())
    score=models.IntegerField(default=0)
    score_fixed=models.IntegerField(default=0, editable=False)
    status=models.CharField(max_length=15,default="ONGOING",choices=STATUS)
    stage=models.CharField(max_length=15, default='NORMAL')
    objects=Task_manager()
    class Meta:
        ordering = [ '-created']
    def __str__(self):
        return self.title

admin.py:

from django.contrib import admin
from django.utils.translation import ugettext_lazy
# Register your models here.
from .models import *
from django.shortcuts import render, redirect
from .forms import *

from searchableselect.widgets import SearchableSelect


def mark_completed(modeladmin, request, queryset):
    refresh(modeladmin,request,queryset)
    tasks=Task.objects.all()
    form=TaskForm()
    for task in tasks:
        if task.status=='ONGOING' and timezone.now()<task.deadline:
            queryset.update(status='COMPLETED')
        elif task.status=="PENDING":
            queryset.update(status='FINISHED')
            #row_completed=queryset.update(status='FINISHED')
        '''message_bit = "%s stories were" % row_completed
        self.message_user(request, "%s successfully marked as published." % message_bit)'''
mark_completed.short_description = "Mark COMPLETED"


def refresh(modeladmin, request, queryset):
    tasks=Task.objects.all()
    form=TaskForm()
    for task in tasks:
        if task.status=="ONGOING" and task.deadline<timezone.now():
            queryset.update(status='PENDING')
refresh.short_description = "Refresh"




class TaskAdmin(admin.ModelAdmin):

    '''def film_status(self, obj):
        if obj.status == 'FINISHED':
            return '<div style="width:100%%; height:100%%; background-color:Green;">%s</div>' % obj.status()
        return obj.status()
    film_status.allow_tags = True'''
    form=TaskForm
    list_display=('task_name','title','status','deadline')
    list_filter=('status',)
    search_fields=('title',)
    date_hierarchy='created'
    actions=[refresh,mark_completed]
    radio_fields={'status': admin.HORIZONTAL}
    list_editable=['status',]
    #raw_id_fields=('c2',)
    #auto_complete=['title']
    '''fieldsets=[
    ['Basic', {
        'fields': ['comment','status']}],
    ['Advanced', {
        'classes': ['collapse'],
        'fields': [('created','deadline_fixed'),('c1', 'c2','c3'),('score_fixed','score')],
    }],]'''
    readonly_fields = ['score','score_fixed','deadline_fixed','created']
    def change_view(self,request,object_id,extra_content=None):
         return super(TaskAdmin,self).change_view(request,object_id)

admin.site.register(Task,TaskAdmin)

1 个答案:

答案 0 :(得分:0)

如果您正在使用sqlite,并且不想使用命令行执行所有操作,则可以使用DB Browser进行访问。

相关问题