Django:获取表单中显示的外键值

时间:2016-02-18 16:42:03

标签: python django

我一直在学习和使用我的测试应用程序玩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并添加字符串字段?我不能这样做,因为它真的会打破我为什么这样做的目的,还是有更好的方法来实现它?非常感谢。

如果您对新手有任何提示,请随意发表评论,我们将不胜感激。

1 个答案:

答案 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以获取更多代码样式信息。