2015-03-06 3 views
0

У меня проблема с пользовательским полем modelformset, так сказать. Это код до сих пор, и она отлично работает:Имя Django ModelFormset вместо ID в поле внешнего ключа

models.py:

class Workplace(models.Model): 
    user = models.ForeignKey(User) 
    description = models.TextField(blank=True, null=True) 
    organization = models.ForeignKey(Organization) 
    position = models.CharField(max_length=250, null=True) 
    start = models.DateTimeField(null=True, blank=True) 
    end = models.DateTimeField(null=True, blank=True) 
    place = models.ForeignKey(Place, null=True, blank=True) 
    deleted = models.BooleanField(default=False) 

forms.py:

class UserWorkplaceForm(forms.ModelForm): 
    class Meta: 
     model = Workplace 
     labels = { 
      'deleted': 'Delete this position' 
     } 

    def __init__(self, *args, **kwargs): 
     super(UserWorkplaceForm, self).__init__(*args, **kwargs) 
     self.fields['position'].required = True 
     self.fields['organization'].required = True 
     self.fields['start'].required = True 

views.py:

def settings_workplace(request): 
    workplace_formset = modelformset_factory(Workplace, 
             form=UserWorkplaceForm, 
             fields=('user', 'position', 'organization', 'start', 'end', 'deleted'), 
             widgets={'user': forms.HiddenInput(), 
                'start': forms.DateInput(attrs={'class': 'workplace-date'}), 
                'end': forms.DateInput(attrs={'class': 'workplace-date'}), 
                'deleted': forms.CheckboxInput(), 
                'organization': forms.TextInput() 
                }, 
             extra=0) 
    if request.method == "POST": 
     formset = workplace_formset(request.POST) 
     if formset.is_valid(): 
      formset.save() 
      formset = workplace_formset(queryset=request.user.get_profile().workplace.filter(deleted=False)) 
    else: 
     formset = workplace_formset(queryset=request.user.get_profile().workplace.filter(deleted=False)) 

    context = { 
     'formset': formset 
    } 

    return render_to_response('accounts/settings_workplaces.html', context, RequestContext(request)) 

' поле «организация» отображается как элемент «Выбрать HTML». Я не могу этого сделать, потому что в базе данных есть тысячи организаций. То, что я хотел бы сделать, - показать Организацию как текстовое поле. Это то, что я сделал в части виджета. Однако это дает мне идентификатор поля, как правило, не имя. Есть ли способ получить оба? Мне нужно имя для более приятного отображения, и мне нужен идентификатор в случае, если редактирование происходит (в другом поле), потому что это поле требуется.

Любые идеи?

+0

Попробуйте использовать плагин JS, такие как автозаполнение в сочетании со службой REST, если у вас есть много записей, которые будут вашим самым лучшим выбор – petkostas

ответ

0

Можете ли вы сделать это ChoiceField, где 1-е значение - это идентификатор организации, а 2-е значение - это имя человека, которое можно читать? Это моя рекомендация справиться с этой ситуацией. Вот документация по настройке «выбора» в Django:

https://docs.djangoproject.com/en/1.7/ref/forms/fields/#choicefield

https://docs.djangoproject.com/en/1.7/ref/models/fields/#choices

+0

Спасибо, я попробую это в понедельник и вернусь к вам – dnmh

+1

Привет, все, что я пробовал с помощью ChoiceField, у меня есть ошибка. Но я решил проблему, заполнив контекст списком организаций, которые появляются среди рабочих мест пользователя, а затем сопоставил их по ID на интерфейсе. Немного грязно, но работает нормально. – dnmh

Смежные вопросы