我有一个MySQL数据库,该数据库的表列出了独立的生成器,RPG系统和类型等。我的几个表都以某种方式连接到我的流派表。在Django中,我想构建一个模板,以流派的子弹作为参数,并显示数据库中所有相关图表,RPG系统,模块等的列表,作为一种简单的参考。我从来没有认真地使用过Django查询集,并且在选择正确的方法来获取所需内容时遇到了问题。
我正在运行MySQL 8.0.17版本(MySQL Community Server-GPL),而我的Django版本是(2,2,6,'final',0)。
这是一个存储过程,它将genre_slug作为参数并返回适合该类型的表的列表:
androidx.appcompat.app.appcompatdelegateImpl.ensureSubDecor() (appcompatdelegateImpl.java:659)
at void androidx.appcompat.app.appcompatdelegateImpl.setContentView(int) (appcompatdelegateImpl.java:552)
at void androidx.appcompat.app.AppCompatactivity.setContentView(int) (AppCompatactivity.java:161)
at void com.example.sessiontracker2.Mainactivity.onCreate(android.os.Bundle) (Mainactivity.java:18)
at void android.app.activity.performCreate(android.os.Bundle,android.os.PersistableBundle) (activity.java:7023)
at void android.app.activity.performCreate(android.os.Bundle) (activity.java:7014)
at void android.app.Instrumentation.callactivityOnCreate(android.app.activity,android.os.Bundle) (Instrumentation.java:1221)
at android.app.activity android.app.activityThread.performLaunchactivity(android.app.activityThread$activityClientRecord,android.content.Intent) (activityThread.java:2818)
at void android.app.activityThread.handleLaunchactivity(android.app.activityThread$activityClientRecord,android.content.Intent,java.lang.String) (activityThread.java:2943)
at void android.app.activityThread.-wrap11(android.app.activityThread,android.app.activityThread$activityClientRecord,java.lang.String) (activityThread.java:-1)
at void android.app.activityThread$H.handleMessage(android.os.Message) (activityThread.java:1663)
at void android.os.Handler.dispatchMessage(android.os.Message) (Handler.java:106)
at void android.os.Looper.loop() (Looper.java:164)
at void android.app.activityThread.main(java.lang.String[]) (activityThread.java:6606)
at java.lang.Object java.lang.reflect.Method.invoke(java.lang.Object,java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:438)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:820)
Caused by: java.lang.ClassnotFoundException: Didn't find class "android.view.View$OnUnhandledKeyEventListener" on path: DexPathList[[zip file "/data/app/com.example.sessiontracker2-n3R4gcLZyUPCaQna69VYOQ==/base.apk"],nativelibraryDirectories=[/data/app/com.example.sessiontracker2-n3R4gcLZyUPCaQna69VYOQ==/lib/arm,/system/lib,/vendor/lib]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:125)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String,boolean) (ClassLoader.java:379)
at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String) (ClassLoader.java:312)
at void androidx.core.view.ViewCompat.setBackground(android.view.View,android.graphics.drawable.Drawable) (ViewCompat.java:2559)
at void androidx.appcompat.widget.actionBarContainer.<init>(android.content.Context,android.util.AttributeSet) (actionBarContainer.java:63)
at java.lang.Object java.lang.reflect.Constructor.newInstance0(java.lang.Object[]) (Constructor.java:-2)
at java.lang.Object java.lang.reflect.Constructor.newInstance(java.lang.Object[]) (Constructor.java:334)
at android.view.View android.view.LayoutInflater.createView(java.lang.String,java.lang.String,android.util.AttributeSet) (LayoutInflater.java:647)
at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View,android.content.Context,android.util.AttributeSet,boolean) (LayoutInflater.java:790)
at android.view.View android.view.LayoutInflater.createViewFromTag(android.view.View,android.util.AttributeSet) (LayoutInflater.java:730)
at void android.view.LayoutInflater.rInflate(org.xmlpull.v1.XmlPullParser,android.view.View,boolean) (LayoutInflater.java:863)
at void android.view.LayoutInflater.rInflateChildren(org.xmlpull.v1.XmlPullParser,boolean) (LayoutInflater.java:824)
at android.view.View android.view.LayoutInflater.inflate(org.xmlpull.v1.XmlPullParser,android.view.ViewGroup,boolean) (LayoutInflater.java:515)
at android.view.View android.view.LayoutInflater.inflate(int,boolean) (LayoutInflater.java:423)
at android.view.View android.view.LayoutInflater.inflate(int,android.view.ViewGroup) (LayoutInflater.java:374)
at android.view.ViewGroup androidx.appcompat.app.appcompatdelegateImpl.createSubDecor() (appcompatdelegateImpl.java:749)
at void androidx.appcompat.app.appcompatdelegateImpl.ensureSubDecor() (appcompatdelegateImpl.java:659)
at void androidx.appcompat.app.appcompatdelegateImpl.setContentView(int) (appcompatdelegateImpl.java:552)
at void androidx.appcompat.app.AppCompatactivity.setContentView(int) (AppCompatactivity.java:161)
at void com.example.sessiontracker2.Mainactivity.onCreate(android.os.Bundle) (Mainactivity.java:18)
at void android.app.activity.performCreate(android.os.Bundle,android.os.PersistableBundle) (activity.java:7023)
I/zygote: at void android.app.activity.performCreate(android.os.Bundle) (activity.java:7014)
at void android.app.Instrumentation.callactivityOnCreate(android.app.activity,java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:438)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:820)
V/FA: Collection enabled
I/zygote: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
at void androidx.core.view.ViewCompat.setBackground(android.view.View,android.view.ViewGroup) (LayoutInflater.java:374)
at android.view.ViewGroup androidx.appcompat.app.appcompatdelegateImpl.createSubDecor() (appcompatdelegateImpl.java:749)
at void androidx.appcompat.app.appcompatdelegateImpl.ensureSubDecor() (appcompatdelegateImpl.java:659)
at void androidx.appcompat.app.appcompatdelegateImpl.setContentView(int) (appcompatdelegateImpl.java:552)
I/zygote: at void androidx.appcompat.app.AppCompatactivity.setContentView(int) (AppCompatactivity.java:161)
at void com.example.sessiontracker2.Mainactivity.onCreate(android.os.Bundle) (Mainactivity.java:18)
at void android.app.activity.performCreate(android.os.Bundle,/vendor/lib]]
at java.lang.Class dalvik.system.BaseDexClassLoader.findClass(java.lang.String) (BaseDexClassLoader.java:125)
V/FA: App package,google app id: com.example.sessiontracker2,1:323497697052:android:1103c7db0bed07898ee4d9
I/zygote: at java.lang.Class java.lang.ClassLoader.loadClass(java.lang.String,java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:438)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:820)
I/FA: App measurement is starting up,version: 12780
To enable debug logging run: adb shell setprop log.tag.FA VERBOSE
To enable faster debug mode event logging run:
adb shell setprop debug.firebase.analytics.app com.example.sessiontracker2
I/zygote: Rejecting re-init on previously-failed class java.lang.Class<androidx.core.view.ViewCompat$2>: java.lang.NoClassDefFoundError: Failed resolution of: Landroid/view/View$OnUnhandledKeyEventListener;
I/zygote: at void androidx.core.view.ViewCompat.setBackground(android.view.View,java.lang.Object[]) (Method.java:-2)
at void com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run() (RuntimeInit.java:438)
at void com.android.internal.os.ZygoteInit.main(java.lang.String[]) (ZygoteInit.java:820)
D/FA: Debug-level message logging enabled
V/FA: Connecting to remote service
V/FA: Connection attempt already in progress
D/AndroidRuntime: Shutting down VM
E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.sessiontracker2,PID: 16590
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.sessiontracker2/com.example.sessiontracker2.Mainactivity}: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to androidx.recyclerview.widget.RecyclerView
at android.app.activityThread.performLaunchactivity(activityThread.java:2865)
at android.app.activityThread.handleLaunchactivity(activityThread.java:2943)
at android.app.activityThread.-wrap11(Unknown Source:0)
at android.app.activityThread$H.handleMessage(activityThread.java:1663)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.activityThread.main(activityThread.java:6606)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:820)
Caused by: java.lang.ClassCastException: androidx.constraintlayout.widget.ConstraintLayout cannot be cast to androidx.recyclerview.widget.RecyclerView
at com.example.sessiontracker2.Mainactivity.onCreate(Mainactivity.java:19)
at android.app.activity.performCreate(activity.java:7023)
at android.app.activity.performCreate(activity.java:7014)
at android.app.Instrumentation.callactivityOnCreate(Instrumentation.java:1221)
at android.app.activityThread.performLaunchactivity(activityThread.java:2818)
at android.app.activityThread.handleLaunchactivity(activityThread.java:2943)
at android.app.activityThread.-wrap11(Unknown Source:0)
at android.app.activityThread$H.handleMessage(activityThread.java:1663)
at android.os.Handler.dispatchMessage(Handler.java:106)
at android.os.Looper.loop(Looper.java:164)
at android.app.activityThread.main(activityThread.java:6606)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:820)
流派和表格(D100Generator)模型:
DELIMITER @@
CREATE PROCEDURE genres_tables
#genre_slug is provided by the link clicked on by the user
(IN slug VARCHAR(72))
BEGIN
SELECT g.genre,t.`table_name`
FROM generators_genre g
#Joins to get to D100Generator table
INNER JOIN generators_d100generator t
ON g.genre=t.genre_id_id
WHERE t.genre_id_id = (
SELECT genre
FROM generators_genre
WHERE genre_slug = slug); /*The slug is provided by the link clicked on*/
END @@
DELIMITER ;
views.py:
class Genre(models.Model):
genre = models.AutoField(primary_key=True)
genre_name = models.CharField(max_length=50)
genre_slug = models.SlugField('leave this blank,autosaves new slug',max_length=72,unique=True,blank=True,null=True)
def save(self,*args,**kwargs):
if not self.genre:
#Newly created object,so set slug
self.genre_slug = slugify(self.genre_name)
super(Genre,self).save(*args,**kwargs)
def __str__(self):
return self.genre_name
class D100Generator(models.Model):
d_100_id = models.AutoField(primary_key=True)
table_name = models.CharField('table name',max_length=100)
system_id = models.ForeignKey(System,on_delete=models.CASCADE,null=True)
genre_id = models.ForeignKey(Genre,on_delete=models.CASCADE)
chart_type = models.CharField('Die used',max_length=15)
chart_instructions = models.TextField('Chart instructions & explanation')
roll_1 = models.TextField('1',null=True)
...
roll_110 = models.TextField('110',null=True)
table_slug = models.SlugField('leave this blank,**kwargs):
if not self.d_100_id:
#Newly created object,so set slug
self.table_slug = slugify(self.table_name)
super(D100Generator,**kwargs)
def __str__(self):
return self.table_name
genre.html模板:
from django.shortcuts import get_object_or_404,render
from .models import Genre,D100Generator
def genre(request,slug):
genre_page = get_object_or_404(Genre,pk=slug)
chosen_genre = Genre.objects.get(genre_slug__exact=slug)
genre_tables = D100Generator.objects.get(genre_id__exact=chosen_genre.genre)
context = {
'genre_page': genre_page,'genre_tables': genre_tables,}
return render (request,'generators/genre.html',context)
在genre.html页面上,我收到错误消息“ DoesnotExist位于/ generators / genre / 9
类型匹配查询不存在。”
我希望该URL在给定URL中显示genre_slug而不是主键'genre'。也许我针对genre_slug使用了错误的逻辑?