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,已经有一段时间了,但我只是偶然发现了这个问题。你能分享一下你最终是如何解决这个问题的吗?不知怎的,你从来没有看到过最后的评论。最后,我使用了基于此解决方案的东西和自定义表单生成器,该生成器根据观察实例为每个变量添加了特定字段。