У меня есть модель, которая содержит значение внешнего ключа, затем в форме, сгенерированной из этой модели как ModelChoiceField . Я хочу автоматически выбрать пользователя ( update_author ).
Я пробовал приведенный ниже код, используя начальное свойство.
Представление создает набор форм с датами, инициализированными для now () для пустой формы. Но я хочу, чтобы поле update_author было инициализировано некоторым значением, и оно не работает.
Даже если оболочка dev возвращает правильного пользователя (print), он все еще не выбран в списке.
Как инициализировать django.forms.ModelChoiceField, связанный с внешним ключом, значением?
models.py
from django.db import models
import datetime
class Author(models.Model):
name = models.CharField(max_length=255)
email = models.CharField(max_length=255)
def __unicode__(self):
return self.name
class DataReview(models.Model):
comments = models.CharField(max_length=255)
update_author = models.ForeignKey('Author')
creation_date = models.DateTimeField('date data review created')
update_date = models.DateTimeField('date review modified')
def __unicode__(self):
return "%s" % (self.comments)
forms.py исправлено
from bamboo.followup.models import *
from django import forms
from django.forms import ModelForm,Form
from django.forms.extras.widgets import SelectDateWidget
import datetime
class DataReviewForm(ModelForm):
def __init__(self, *args, **kwargs):
initial = {
'update_date': datetime.datetime.now(),
'creation_date': datetime.datetime.now(),
'update_author': 1 # not Author.objects.get(id=1)
}
if kwargs.has_key('initial'):
kwargs['initial'].update(initial)
else:
kwargs['initial'] = initial
# Initializing form only after you have set initial dict
super(DataReviewsForm,self).__init__(*args, **kwargs)
self.fields['update_date'].widget.attrs['disabled']=''
self.fields['creation_date'].widget.attrs['disabled']=''
self.fields['update_author'].widget.attrs['disabled'] = ''
class Meta:
model = DataReview
views.py обновлено
def review(request):
DataReviewsFormSet = modelformset_factory(DataReview, form=DataReviewsForm)
if request.method == 'POST':
formset = DataReviewSet(request.POST)
if formset.is_valid():
# do something with the formset.cleaned_dat
print 'YOUHOU!'
else:
formset = DataReviewSet()
return render_to_response('followup/runs.html', {
"formset": formset,
})