Перенос объектов из другого приложения в ChoiceField - PullRequest
0 голосов
/ 27 сентября 2018

Я сделал поле выбора для файла 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 - это обычный кортеж с некоторыми аргументами, которые отображаются на мой взгляд, ноЯ хочу взять объекты, которые хранятся в другом приложении под названием «Студенты» (хотят экспортировать «имя_первое имя» + «имя_последовательности») вместо записей в 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)

Так что я ищу некий стратегический способ, как решить эту проблему.Надеюсь, кто-нибудь может дать мне подсказку.

1 Ответ

0 голосов
/ 27 сентября 2018

Вы делаете это немного сложнее, чем нужно.Вы не хотите брать имена от Student и «помещать их в кортеж MY_CHOICES».Кортеж не имеет значения.Вам нужно иметь поле, которое заполняется из модели Student, и специально для этого есть поле формы: ModelChoiceField .Вы можете просто использовать его напрямую:

from students.models import Student

class StudentForm(forms.Form):
    student = forms.ModelChoiceField(queryset=Student.objects.all())

Вам больше ничего не нужно делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...