Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Django 如何在一个页面上创建模型及其泛型关系_Django_Django Models_Django Forms - Fatal编程技术网

Django 如何在一个页面上创建模型及其泛型关系

Django 如何在一个页面上创建模型及其泛型关系,django,django-models,django-forms,Django,Django Models,Django Forms,我有以下设置: class Observation(models.Model): start_time = models.DateTimeField() measurements = generic.GenericRelation(Measurement) class Measurement(models.Model): variable = models.ForeignKey(Variable) value = models.CharField(max_len

我有以下设置:

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')
当然,这些都是简化模型。测量需要通用,因为它也在其他地方使用

我想做一个页面,在上面我可以创建一个观察和相关的测量。用户应该能够添加观测中尚未出现的测量值。我有一个用于测量的工作模型


我不断地遇到不存在的关系,我认为我在涉及泛型inlinemodelform时犯了一个愚蠢的错误。我已经搜索过了,但找不到这方面的例子。任何人都可以通过提供示例或链接来帮助我吗?

您应该能够在视图中使用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>
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))
模板:

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>
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))

这看起来很有希望,我只需要每次观察都进行多次测量,所以我会尝试自己将其转换为表格集,然后再与您联系。嘿@dyve,已经有一段时间了,但我只是偶然发现了这个问题。你能分享一下你最终是如何解决这个问题的吗?不知怎的,你从来没有看到过最后的评论。最后,我使用了基于此解决方案的东西和自定义表单生成器,该生成器根据观察实例为每个变量添加了特定字段。