Python Django无法赋值,必须是另一个实例

Python Django无法赋值,必须是另一个实例,python,django,Python,Django,因此,我只是想在我的课堂模型中添加讲师类别,我希望用户只能在课堂或研讨会之间进行选择。如果我在两个模型中都添加了选项,我可以在django admin上看到它们,但我得到了错误: Cannot assign "'0'": "Lecture.lecture_category" must be a "LectureCategory" instance. 若我并没有把选项放在第二个模型中,那个么在管理面板中将显示0或1,而不是我的值。有什么建议吗 class LectureCategory(mode

因此,我只是想在我的课堂模型中添加讲师类别,我希望用户只能在课堂或研讨会之间进行选择。如果我在两个模型中都添加了选项,我可以在django admin上看到它们,但我得到了错误:

Cannot assign "'0'": "Lecture.lecture_category" must be a "LectureCategory" instance.
若我并没有把选项放在第二个模型中,那个么在管理面板中将显示0或1,而不是我的值。有什么建议吗

class LectureCategory(models.Model):
    lecture_category = models.IntegerField(choices=((0, "Classes "),
                                                    (1, "Seminars"),
                                                    ))

    def __str__(self):
        return str(self.lecture_category)


class Lecture(models.Model):
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures', null=True, )
    lecture_category = models.ForeignKey('LectureCategory', on_delete=models.CASCADE,
                                         default='', related_name='categories',
                                         choices=((0, "Classes "),
                                                  (1, "Seminars"),
                                                  )
                                         )

您无需使用
讲师类别
模型来筛选类别上的
讲师
查询集:

class Lecture(models.Model):
    course = models.ForeignKey(
       'Course', 
        on_delete=models.CASCADE, 
        default=None, 
        related_name='lectures', 
        null=True, 
        )

    CATEGORY_CLASSES = 0
    CATEGORY_SEMINARS = 1
    CATEGORY_CHOICES = (
        (CATEGORY_CLASSES, "Classes"),
        (CATEGORY_SEMINARS, "Seminars"),
        )
    category = models.IntegerField(
       choices=CATEGORY_CHOICES
       )


# select only classes
Lecture.objects.filter(category=Lecture.CATEGORY_CLASSES)

# select only seminars
Lecture.objects.filter(category=Lecture.CATEGORY_SEMINARS)

# display the lecture's category readable label
# cf https://docs.djangoproject.com/en/2.0/ref/models/instances/#django.db.models.Model.get_FOO_display
print(lecture.get_category_display())
您还可以直接进行
讲座.研讨会.all()
讲座.classes.all()

如果您想允许管理员添加新的类别,那么拥有一个独特的
讲师类别
模型是有意义的,但这样一来,您将失去每个类别的自定义管理器,实际上还需要提前知道类别。在这种情况下,您的
讲师类别
模型将需要一些
标签
字段:

class LectureCategory(models.Model):
    label = models.CharField(
        "label",
         max_length=50
         )
    def __str__(self):
        return self.label


class Lecture(models.Model):
    course = models.ForeignKey(
       'Course', 
        on_delete=models.CASCADE, 
        default=None, 
        related_name='lectures', 
        null=True, 
        )

    category = models.ForeignKey(
        LectureCategory, 
        related_name="lectures"
        on_delete=models.PROTECT, 
        )
然后,如果您想重复类别/讲座:

for category in Category.objects.all():
    print(category)
    for lecture in category.lectures.all():
        print(lecture)

您无需使用
讲师类别
模型来筛选类别上的
讲师
查询集:

class Lecture(models.Model):
    course = models.ForeignKey(
       'Course', 
        on_delete=models.CASCADE, 
        default=None, 
        related_name='lectures', 
        null=True, 
        )

    CATEGORY_CLASSES = 0
    CATEGORY_SEMINARS = 1
    CATEGORY_CHOICES = (
        (CATEGORY_CLASSES, "Classes"),
        (CATEGORY_SEMINARS, "Seminars"),
        )
    category = models.IntegerField(
       choices=CATEGORY_CHOICES
       )


# select only classes
Lecture.objects.filter(category=Lecture.CATEGORY_CLASSES)

# select only seminars
Lecture.objects.filter(category=Lecture.CATEGORY_SEMINARS)

# display the lecture's category readable label
# cf https://docs.djangoproject.com/en/2.0/ref/models/instances/#django.db.models.Model.get_FOO_display
print(lecture.get_category_display())
您还可以直接进行
讲座.研讨会.all()
讲座.classes.all()

如果您想允许管理员添加新的类别,那么拥有一个独特的
讲师类别
模型是有意义的,但这样一来,您将失去每个类别的自定义管理器,实际上还需要提前知道类别。在这种情况下,您的
讲师类别
模型将需要一些
标签
字段:

class LectureCategory(models.Model):
    label = models.CharField(
        "label",
         max_length=50
         )
    def __str__(self):
        return self.label


class Lecture(models.Model):
    course = models.ForeignKey(
       'Course', 
        on_delete=models.CASCADE, 
        default=None, 
        related_name='lectures', 
        null=True, 
        )

    category = models.ForeignKey(
        LectureCategory, 
        related_name="lectures"
        on_delete=models.PROTECT, 
        )
然后,如果您想重复类别/讲座:

for category in Category.objects.all():
    print(category)
    for lecture in category.lectures.all():
        print(lecture)

在您想要添加更多关于类别的信息之前,您不需要为类别创建单独的模型。你可以这样做

class Lecture(models.Model):
    Classes= 0
    Seminars= 1
    lecture_choice = (
        (Classes, 'Classes'),
        (Seminars, 'Seminars'),
    )
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures', null=True, )
    lecture_category = models.IntegerField(choices=lecture_choice ,default=Classes)

在您想要添加更多关于类别的信息之前,您不需要为类别创建单独的模型。你可以这样做

class Lecture(models.Model):
    Classes= 0
    Seminars= 1
    lecture_choice = (
        (Classes, 'Classes'),
        (Seminars, 'Seminars'),
    )
    course = models.ForeignKey('Course', on_delete=models.CASCADE, default='', related_name='lectures', null=True, )
    lecture_category = models.IntegerField(choices=lecture_choice ,default=Classes)

为什么讲师分类是一个单独的模型?这似乎没有任何原因,特别是因为它只存储了两个整数。我想在我的templateFine中迭代它们,但这并不能解释为什么它们需要在一个单独的模型中。我需要这样,如果我有课,课堂上的所有课都要显示,否则如果我有研讨会,将显示研讨会中的所有讲座。
讲师类别
在管理面板中显示为0或1,因为这就是您定义要打印的
讲师类别
实例的方式(请参见
讲师类别。\uu str\uuuu
)为什么讲师类别是一个单独的模型?这似乎没有任何原因,特别是因为它只存储了两个整数。我想在我的templateFine中迭代它们,但这并不能解释为什么它们需要在一个单独的模型中。我需要这样,如果我有课,课堂上的所有课都要显示,否则如果我有研讨会,将显示研讨会中的所有讲座。
讲师类别
在管理面板中显示为0或1,因为这就是您定义要打印的
讲师类别
实例的方式(请参见
讲师类别。uu str_u_u
),现在当我编辑时,我的模板上只有0和1。如果要显示选择的值,请使用{{object.get_teachment_category_display}现在,当我进行迭代时,我的模板上只得到0和1。如果要显示选项的值,请使用{{object.get_teachment_category_display}