models代碼如下:
class Course(models.Model):
name = models.CharField(unique=True, max_length=64)
price = models.PositiveIntegerField(default=19800)
outline = models.TextField()
def __str__(self):
return "%s" % self.name
class Meta:
verbose_name_plural = "課程信息表"
verbose_name = "課程信息表"
class ClassList(models.Model):
course = models.ForeignKey("Course")
semester = models.PositiveIntegerField(verbose_name="學期")
class_type_choice = ((0, '脫產'),
(1, '周末'),
(2, '網絡'),
)
branch = models.ForeignKey("Branch")
class_type = models.PositiveIntegerField(choices=class_type_choice)
teachers = models.ManyToManyField("UserProfile")
start_date = models.DateField()
end_date = models.DateField()
def __str__(self):
return "%s(%s)" % (self.course, self.semester)
class Meta:
verbose_name_plural = "班級信息表"
verbose_name = "班級信息表"
unique_together = ("course", "semester")
兩個表關系如上,ClassList表的course是一個外鍵,關聯上面的Course表。
我想在ClassList中定義__str__函數,就像代碼中寫的。
我是用django的modelform來處理數據並構建web頁面。
結果在進入那個由modelform構建的頁面時,發生了異常


C:\Users\Administrator\AppData\Roaming\Python\Python35\site-packages\django\db\models\fields\related_descriptors.py 下的line 193
if rel_obj is None and not self.field.null:
raise self.RelatedObjectDoesNotExist(
"%s has no %s." % (self.field.model.__name__, self.field.name)
)
else:
return rel_obj
so,就是那個RelatedObjectDoesNotExist,google了很久,發現有個網友說的很好:
https://stackoverflow.com/questions/26270042/how-do-you-catch-this-exception#comment41357708_26270785
那個票最多的答案。
正如他所說的Django is amazing when its not terrifying.我此時的內心是崩潰的。。。
代碼更改如下:
class ClassList(models.Model):
course = models.ForeignKey("Course")
semester = models.PositiveIntegerField(verbose_name="學期")
class_type_choice = ((0, '脫產'),
(1, '周末'),
(2, '網絡'),
)
branch = models.ForeignKey("Branch")
class_type = models.PositiveIntegerField(choices=class_type_choice)
teachers = models.ManyToManyField("UserProfile")
start_date = models.DateField()
end_date = models.DateField()
def __str__(self):
try:
return "%s(%s)" % (self.course, self.semester)
except Course.DoesNotExist:
return "%s" % self.semester
正如大神網友所說,我抓住了這個異常,隨便返回個不是外鍵的值就好了。
無FUCK說~~~希望能幫到大家。。。
