Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 为Django中的每个用户创建和跟踪模型实例_Python_Django_Django Models - Fatal编程技术网

Python 为Django中的每个用户创建和跟踪模型实例

Python 为Django中的每个用户创建和跟踪模型实例,python,django,django-models,Python,Django,Django Models,所以我正在开发这个简单的测验应用程序,我想我把我的模型搞砸了。 最初的目标是要有一个测验参与者模型、测验类别、等级和每个测验下的问题列表。然而,我已经厌倦了如何构建模型,让每个用户都有一个测验、级别和问题的实例,以便跟踪玩家的进度 型号.PY from django.db import models from django.urls import reverse from django.contrib.auth.models import User from django.db.models.s

所以我正在开发这个简单的测验应用程序,我想我把我的模型搞砸了。 最初的目标是要有一个测验参与者模型、测验类别、等级和每个测验下的问题列表。然而,我已经厌倦了如何构建模型,让每个用户都有一个测验、级别和问题的实例,以便跟踪玩家的进度

型号.PY

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


# QUIZ CLASS MODEL
class Quiz(models.Model):
    category = models.CharField(max_length=200, help_text="quiz name")

    class Meta:
        ordering = ['category',]

    def __str__(self):
        return f"{self.category}"


#  LEVEL CLASS MODEL
class Level(models.Model):
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    DIFFICULTY = [
        (("level1"),("level1")), (("level2"),("level2")), (("level3"),("level3")), (("level4"),("level4")), (("level5"),("level5")),
         (("level6"),("level6")), (("level7"),("level7")), (("level8"),("level8")), (("level9"),("level9")), (("level10"),("level10")),
         (("bonus"),("bonus"))
         ]
    levels = models.CharField(max_length=7, choices=DIFFICULTY)
    is_completed = models.BooleanField(default=False, help_text="check if category level has been completed")

    def __str__(self):
        return self.levels



# QUESTION CLASS MODELS
class Question(models.Model):
    question = models.CharField(max_length=1000)
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)

    is_answered = models.BooleanField(default=False)

    def __str__(self):
        return self.question


# ANSWER CLASS MODEL
class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice = models.CharField(max_length=1000)
    is_correct = models.BooleanField(default=False)

    def __str__(self):
        return self.choice



# QUIZ TAKER MODEL
class QuizTaker(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=True)
    questions = models.ForeignKey(Question, on_delete=models.CASCADE, null=True)
    score = models.IntegerField(default=0)
    token = models.IntegerField(default=0)

    def __str__(self):
        return self.user.username



@receiver(post_save, sender=User)
def create_quiztaker(sender, instance, created, **kwargs):
    if created:
        QuizTaker.objects.create(user=instance)


@receiver(post_save, sender=User)
def update_quiztaker(sender, instance, created, **kwargs):
    try:
        if created == False:
            instance.quiztaker.save()
    except:
        QuizTaker.objects.create(user=instance)
from django.contrib import admin
from .models import Question, QuizTaker, Quiz, Answer, Level


# Register your models here.
# admin.site.register(Question)
class answeinline(admin.TabularInline):
    model = Answer
    min_num = 4
    max_num = 4

class levelinline(admin.TabularInline):
    model = Level
    min_num = 10
    max_num = 11


@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    list_display = ['question', 'quiz', 'is_answered']
    inlines = [answeinline]

@admin.register(Quiz)
class QuizAdmin(admin.ModelAdmin):
    inlines = [levelinline]

admin.site.register(QuizTaker)
ADMIN.PY

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver


# QUIZ CLASS MODEL
class Quiz(models.Model):
    category = models.CharField(max_length=200, help_text="quiz name")

    class Meta:
        ordering = ['category',]

    def __str__(self):
        return f"{self.category}"


#  LEVEL CLASS MODEL
class Level(models.Model):
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)
    DIFFICULTY = [
        (("level1"),("level1")), (("level2"),("level2")), (("level3"),("level3")), (("level4"),("level4")), (("level5"),("level5")),
         (("level6"),("level6")), (("level7"),("level7")), (("level8"),("level8")), (("level9"),("level9")), (("level10"),("level10")),
         (("bonus"),("bonus"))
         ]
    levels = models.CharField(max_length=7, choices=DIFFICULTY)
    is_completed = models.BooleanField(default=False, help_text="check if category level has been completed")

    def __str__(self):
        return self.levels



# QUESTION CLASS MODELS
class Question(models.Model):
    question = models.CharField(max_length=1000)
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE)

    is_answered = models.BooleanField(default=False)

    def __str__(self):
        return self.question


# ANSWER CLASS MODEL
class Answer(models.Model):
    question = models.ForeignKey(Question, on_delete=models.CASCADE)
    choice = models.CharField(max_length=1000)
    is_correct = models.BooleanField(default=False)

    def __str__(self):
        return self.choice



# QUIZ TAKER MODEL
class QuizTaker(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    quiz = models.ForeignKey(Quiz, on_delete=models.CASCADE, null=True)
    questions = models.ForeignKey(Question, on_delete=models.CASCADE, null=True)
    score = models.IntegerField(default=0)
    token = models.IntegerField(default=0)

    def __str__(self):
        return self.user.username



@receiver(post_save, sender=User)
def create_quiztaker(sender, instance, created, **kwargs):
    if created:
        QuizTaker.objects.create(user=instance)


@receiver(post_save, sender=User)
def update_quiztaker(sender, instance, created, **kwargs):
    try:
        if created == False:
            instance.quiztaker.save()
    except:
        QuizTaker.objects.create(user=instance)
from django.contrib import admin
from .models import Question, QuizTaker, Quiz, Answer, Level


# Register your models here.
# admin.site.register(Question)
class answeinline(admin.TabularInline):
    model = Answer
    min_num = 4
    max_num = 4

class levelinline(admin.TabularInline):
    model = Level
    min_num = 10
    max_num = 11


@admin.register(Question)
class QuestionAdmin(admin.ModelAdmin):
    list_display = ['question', 'quiz', 'is_answered']
    inlines = [answeinline]

@admin.register(Quiz)
class QuizAdmin(admin.ModelAdmin):
    inlines = [levelinline]

admin.site.register(QuizTaker)

您是否面临架构设计问题?不知道我是否会说架构问题。我的模型似乎不适合预期的工作。你是否面临模式设计问题?不知道我是否会说模式问题。我的模型似乎不适合预期的工作。