2011-03-30 2 views
0

에 모델과의 일반적인 관계를 만드는 방법 나는이 설정이 있습니다한 페이지

class Observation(models.Model): 
    start_time = models.DateTimeField() 
    measurements = generic.GenericRelation(Measurement) 

class Measurement(models.Model): 
    variable = models.ForeignKey(Variable) 
    value = models.CharField(max_length=300, blank=True) 
    content_type = models.ForeignKey(ContentType) 
    object_id = models.PositiveIntegerField() 
    content_object = generic.GenericForeignKey('content_type', 'object_id') 

이러한 과정의 단순화 된 모델입니다를. 측정은 다른 곳에서도 사용되기 때문에 일반적이어야합니다.

관측치 관련 측정을 만들 수있는 페이지를 만들고 싶습니다. 사용자는 관찰에 아직 나타나지 않은 측정을 추가 할 수 있어야합니다. 나는 측정을위한 ModelForm을 가지고있다.

나는 기존 관계가 없기 때문에 generic_inlinemodelform과 관련된 어리석은 실수를 저 지르고 있다고 생각합니다. 나는 수색했으나 이것을위한 예제를 찾을 수 없다. 예제를 제공하거나 연결하여 누구나 나를 도울 수 있습니까?

답변

0

보기에는 commit = False를 사용하여 저장할 수 있어야합니다.

forms.py :

class MeasurementForm(forms.ModelForm): 
    class Meta: 
     model = Measurement 
     fields = ('variable', 'value') 

class ObservationForm(forms.ModelForm): 
    class Meta: 
     model = Observation 

템플릿 :

<form method='POST> 
    <legend>Observation</legend> 
    {{ observation_form.as_p }} 
    <legend>Measurement</legend> 
    {{ measurement_form.as_p }} 
    <input type='submit' value='submit' /> 
</form> 

views.py : 유망 보이는

def new_observation(request): 
    if request.method=='POST': 
     observation_form = ObservationForm(request.POST) 
     measurement_form = MeasurementForm(request.POST) 
     if observation_form.is_valid() and measurement_form.is_valid(): 
      observation_instance = observation_form.save() 
      measurement_instance = measurement_form.save(commit=False) 
      measurement_instance.content_object = observation_instance 
      measurement_instance.save() 
      return HttpResponseRedirect(observation_instance.get_absolute_url()) 
    else: 
     observation_form = ObservationForm() 
     measurement_form = MeasurementForm() 

    context = { 'observation_form':observation_form, 
       'measurement_form':measurement_form,} 

    return render_to_response('add-observation.html', context, 
      context_instance=RequestContext(request)) 
+0

, 방금 여러 measurem 필요 관측 당 ents 그래서 나는 이것을 formsets 자신으로 번역하고 다시 당신에게 돌아 가려고 노력할 것입니다. – dyve

+0

헤이 @ 잠시 지났지 만 나는이 질문을 우연히 발견했습니다. 결국 어떻게 해결했는지 공유 해 주실 수 있습니까? –

+0

어떻게 든 마지막 코멘트를 보지 못했습니다. 나는이 솔루션과 관찰 인스턴스를 기반으로 각 변수에 대한 특정 필드를 추가 한 사용자 정의 폼 생성기를 기반으로 무언가를 사용하여 결국. – dyve

관련 문제