将对象从另一个应用程序传输到选择字段



我用这个简单的代码为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是一个普通的元组,在我的视图中显示了一些参数,但我想采用存储在另一个名为"学生"的应用程序中的对象(想要导出"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)

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

你让这比它需要的要困难得多。您不想从学生那里获取名称并"将其放入元组MY_CHOICES中"。元组无关紧要。你想要的是从学生模型填充一个字段,并且有一个专门用于此的表单字段:ModelChoiceField。您可以直接使用它:

from students.models import Student
class StudentForm(forms.Form):
student = forms.ModelChoiceField(queryset=Student.objects.all())

您无需执行任何其他操作。

最新更新