2013-03-20 4 views
0

модели:Джанго: Сохранить идентификатор на OneToOneField

class UserDataUpdate(models.Model): 
    code = models.CharField(max_length=8) 
    address = models.CharField(max_length=50) 

class UserSurvey(models.Model): 
    about_treatment = models.CharField(max_length=2) 
    user_data_update = OneToOneField(UserDataUpdate) 

просмотров:

@login_required 
def generate_survey(request): 
    user_data_update = UserDataUpdate.objects.get(code=request.user.username) 
    if request.method == 'POST': 
     form = SurveyForm(request.POST) 
     if form.is_valid(): 
      form.save() 
      return redirect('/success') 
    else: 
     form = SurveyForm(request.GET) 
    return render_to_response(
     'survey.html', 
     {'form': form }, 
     context_instance = RequestContext(request)) 

форма:

class SurveyForm(forms.ModelForm): 

    def __init__(self, *args, **kwargs): 
     super(SurveyForm, self).__init__(*args, **kwargs) 
     for field in self.fields.values(): 
      field.widget = RadioSelect(choices=SURVEY_CHOICES) 

    class Meta: 
     model = Survey 
     exclude = ['user_data_update'] 

Я просто нужен способ, чтобы установить UserDataUpdate идентификатор (что уже был создан) в UserSurvey.

Я получаю это сообщение на generate_survey request.POST:

user_data_update_app_usersurvey.user_data_update_id may not be NULL 

ответ

0

Это должно быть ясно, что вы получите значение user_data_update но потом ничего не делать с ним. Я предполагаю, что вы хотите, чтобы установить его на объект, который создается в форме:.

if form.is_valid(): 
    instance = form.save(commit=False) 
    instance.user_data_update = user_data_update 
    instance.save() 

(я не понимаю, что все, что материал в __init__ методе формы, как предполагается сделать вас есть только одно поле в вашем форма, во всяком случае.)

+0

В этом UserSurvey отсутствует большое количество атрибутов по сравнению с оригинальным. Идея этой формы заключалась в том, чтобы установить все поля для использования рендеринга RadioSelect с помощью одного CHOICE. Кстати, спасибо за пример, он работает очень хорошо. Никогда не используется (commit = False) для создания изменяемого объекта. Потрясающие! –

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