我一直在学习和使用我的测试应用程序玩django,我想就此事请求帮助。
我有以下型号:
class Job_Posting(models.Model):
Job_Position = models.CharField(max_length=30, null=True, unique=True)
def __unicode__(self):
return self.Job_Position
class Courses_list(models.Model):
Abbreviation = models.CharField(max_length=100, unique=True)
Course = models.CharField(max_length=100, unique=True)
def __unicode__(self):
return self.Abbreviation
class Educational_Requirement(models.Model):
fkey = models.ForeignKey('Job_Posting')
Course = models.ForeignKey('Courses_list')
这在管理员中很简单,添加了职位并分配了所需的课程。问题在于Educational_Requirement
,因为我通过表单ModelChoiceField
在我的前端显示它并覆盖queryset
以显示正确的选择。
下拉列表显示Educational_Requirement object
,我希望它在Course
中显示Educational_Requirement
的值。我无法在__unicode__
中使用Educational_Requirement
,因为它会返回错误:
coercing to Unicode: need string or buffer, Courses_list found
我是否真的需要在__unicode__
中设置Educational_Requirement
并添加字符串字段?我不能这样做,因为它真的会打破我为什么这样做的目的,还是有更好的方法来实现它?非常感谢。
如果您对新手有任何提示,请随意发表评论,我们将不胜感激。
答案 0 :(得分:1)
如果您想更改ModelChoiceField
的显示值,您可以轻松定义自己的字段并覆盖label_from_instance
方法:
class CourseField(forms.ModelChoiceField):
def label_from_instance(self, obj):
# return the field you want to display, which is Course
return obj.Course
class EducationalRequirementForm(forms.ModelForm):
Course = CourseField(queryset=Courses_list.objects.all())
没有关系,但你的编码风格很差。模型是python类,所以它们应该像EducationalRequirement
。字段是python类属性,它们应该是带有job_position
等下划线的小写字母。检查python PEP8 documentation以获取更多代码样式信息。