Как создать модель и ее родовые отношения на одной странице - PullRequest
0 голосов
/ 30 марта 2011

У меня есть эта настройка:

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.Я искал, но не могу найти пример для этого.Кто-нибудь может мне помочь, предоставив пример или ссылку на него?

1 Ответ

0 голосов
/ 30 марта 2011

Вы должны быть в состоянии сохранить их, используя 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))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...