簡體   English   中英

如何使django管理站點無法識別(在不同應用程序上)外鍵的模型成為當前應用程序的模型?

[英]How to make django admin site to not recognize a foreign key'ed model (on different app) to be a model of current app?

我有三個模型-其中兩個在一個應用程序中,第三個在另一個應用程序中。 結構是這樣的:

taapp.models:

class Teachers(model.Model):
    fullname = models.CharField(max_length=50)
    ...

class TeachersScale(model.Model):
    teacher = models.ForeignKey("Teachers")
    abbr = models.ForeignKey("questions.QuestionTypes")

questions.models:

class QuestionTypes(models.Model):
    abbr = models.CharField(max_length=5)
    ......

我將所有這些模型注冊為管理員:

taapp.admin:

from taapp.models import Teachers
from taapp.models import TeachersScale
from django.contrib import admin

from admin_forms import TeachersAdmin, TeachersScaleAdmin

admin.site.register(Teachers, TeachersAdmin)
admin.site.register(TeachersScale, TeachersScaleAdmin)

taapp.admin_forms:

from django import forms
from django.contrib import admin

class TeachersAdmin(admin.ModelAdmin):
    list_display = ('fullname', 'email', 'registration_date')

class TeachersScaleAdmin(admin.ModelAdmin):
    list_display = ('teacher', 'abbr')
    list_filter = ['teacher','abbr']

當我嘗試向管理站點中的TeachersScale添加字段時,出現以下錯誤:

DatabaseError at /admin/taapp/teachersscale/add/ 
(1146, "Table 'taapp.questions_questiontypes' doesn't exist")

它處理QuestionTypes ,因為它是taapp的模型。 怎么解決呢? 還是我的數據庫設計有問題?

我嘗試了TabularInline for QuestionTypes來查看反向添加是否有效。 好吧,它的工作原理是:

Questions.admin:

class TeachersScaleInline(admin.TabularInline):
    model = TeachersScale

class QuestionTypesAdmin(admin.ModelAdmin):
    inlines = [TeachersScaleInline]

提前致謝。

看起來您實際上尚未創建問題表,或者如果您已將其強制放入其他數據庫中。 外鍵希望共享同一數據庫,並且讓多個應用程序共享同一數據庫是完全標准的。 因此,應用程序名稱是自動生成的表名稱的一部分。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM