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