将对象从另一个应用程序传输到 ChoiceField

我用这个简单的代码为 HTML 文件创建了一个选择字段:


MY_CHOICES = (

    ('0', 'Johnny B. Goode'),

    ('1', 'Lightning McQueen'),

    ('2', 'Iron Man'),

)


def get_student():

    student_data = MY_CHOICES

    student_list = student_data

    return student_list


def get_my_students():

    student_list = get_student()

    choices_list = student_list

    return choices_list


class studentForm(forms.Form):

    def __init__(self, *args, **kwargs):

        super(studentForm, self).__init__(*args, **kwargs)

        self.fields['my_students_field'] = forms.ChoiceField(choices=get_my_students())



def get_data(request):

    form = studentForm()

    if form:

        print('form')

        return render_to_response('bills/generator.html',{'form': form})

    else:

        return print('no Form')

我现在的问题是,MY_CHOICES 是一个普通的元组,其中一些参数显示在我的视图中,但我想获取存储在另一个名为“Students”的应用程序中的对象(想要导出“first_name”+“last_name” ) 而不是 MY_CHOICES 中的条目。对象存储在这个类中:


class Student(models.Model):

    first_name = models.CharField(_(u'Vorname'),max_length=30)

    last_name = models.CharField(_(u'Nachname'),max_length=30)

    teacher = models.ForeignKey(Teacher, on_delete=models.CASCADE)

    location = models.ForeignKey(Location, on_delete=models.CASCADE)

    postal_code = models.CharField(_(u'Postleitzahl'),max_length=30)

    city = models.CharField(_(u'Ort'),max_length=30)


    def __str__(self):

        return "%s %s" % (self.first_name, self.last_name)

所以我正在寻找一种战略方法,如何解决这个问题。希望有人能给我一个提示。


富国沪深
浏览 138回答 1
1回答

精慕HU

你让这比它需要的要困难得多。您不想从 Student 中获取名称并“将其放入元组 MY_CHOICES”。元组无关紧要。您想要的是有一个从 Student 模型填充的字段,并且有一个专门用于该字段的表单字段:ModelChoiceField。你可以直接使用它:from students.models import Studentclass StudentForm(forms.Form):    student = forms.ModelChoiceField(queryset=Student.objects.all())你不需要做任何其他事情。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python