【发布时间】:2021-07-28 11:44:14
【问题描述】:
我正在尝试构建一个 django 应用程序来维护一个名为“Actuacion”的类。根据字段“tipo”的值,需要附加信息,因此我创建了一个带有公共字段的主类“Actuacion”,并为每个“tipo”创建了一个不同的类,每个类型的特定字段与主类链接通过外键“执行”。
模型是这样的:
models.py
class TipoActuacion(models.Model):
# Values for "tipo" by the moment are "DEPURACION", "CONSERVACION", "PLANEAMIENTO"
tipo = models.CharField(max_length=50)
def __str__(self):
return self.tipo
class Actuacion(models.Model):
titulo = models.CharField(max_length=200)
tipo = models.ForeignKey('TipoActuacion', on_delete=models.SET_NULL, null=True)
# Other common fields
class ActuacionPlaneamiento(models.Model):
actuacion = models.ForeignKey('Actuacion', on_delete=models.SET_NULL, null=True)
info = models.CharField(max_length=100)
# Other fields
class ActuacionDepuracion(models.Model):
actuacion = models.ForeignKey('Actuacion', on_delete=models.SET_NULL, null=True)
habitantes = models.IntegerField(null=True, blank=True)
# Other fields
class ActuacionConservacion(models.Model):
actuacion = models.ForeignKey('Actuacion', on_delete=models.SET_NULL, null=True)
fecha = models.DateField(null=True, blank=True)
# Other fields
所以,我假装通过基于 django 类的视图创建“Actuacion”对象,并在创建主对象后,根据“tipo”字段上注册的值重定向到相应的创建视图以完成信息。
主类“Actuacion”已创建,但我还没有找到将其与子实体链接的方法(基于字段“tipo”,例如 ActuacionConservacion)。我把创建的Actuacion对象的pk传给kwargs,但是我需要接收这个参数并用它来修复子ActuacionConservacion对象的外键字段。
我被困在这里,任何建议都欢迎
views.py
class ActuacionCreate(CreateView):
model = Actuacion
fields = '__all__'
template_name = 'pgi/actuacion_create.html'
def get_success_url(self):
servicio = self.object.tipo
if servicio.__str__() == 'DEPURACION':
return reverse('actuacion-depuracion-create', kwargs={'pk': self.object.pk})
elif servicio.__str__() == 'CONSERVACION':
return reverse('actuacion-conservacion-create', kwargs={'pk': self.object.pk})
elif servicio.__str__() == 'PLANEAMIENTO':
return reverse('actuacion-planeamiento-create', kwargs={'pk': self.object.pk})
else:
return reverse('actuacion-detail', kwargs={'pk': self.object.pk})
class ActuacionConservacionCreate(CreateView):
model = ActuacionConservacion
fields = '__all__'
template_name = 'pgi/actuacion_tipo_create.html'
urls.py
urlpatterns = [
url(r'^$', views.index, name='index'),
url(r'^actuaciones/$', views.actuacion_list, name='actuacion-list'),
url(r'^actuacion/(?P<pk>\d+)/$', views.ActuacionDetailView.as_view(), name='actuacion-detail'),
url(r'^actuacion/create/$'/, views.ActuacionCreate.as_view(), name='actuacion-create'),
url(r'^actuacion/create/(?P<pk>\d+)/depuracion/$', views.ActuacionDepuracionCreate.as_view(), name='actuacion-depuracion-create'),
url(r'^actuacion/create/(?P<pk>\d+)/conservacion/$', views.ActuacionConservacionCreate.as_view(), name='actuacion-conservacion-create'),
url(r'^actuacion/create/(?P<pk>\d+)/planeamiento/$', views.ActuacionPlaneamientoCreate.as_view(), name='actuacion-planeamiento-create'),
url(r'^actuacion/(?P<pk>\d+)/update/$', views.ActuacionUpdate.as_view(), name='actuacion-update'),
url(r'^actuacion/(?P<pk>\d+)/delete/$', views.ActuacionDelete.as_view(), name='actuacion-delete'),
]
【问题讨论】:
标签: django django-views