代码之家  ›  专栏  ›  技术社区  ›  Rick

Django/Python,使用contenttypes或其他方法使数据库save函数可重用(以便它从字符串中获取modelname和appname)?

  •  0
  • Rick  · 技术社区  · 15 年前

    我想创建一些可被任何模型重用的函数,以便我可以以字符串格式指定appname和模型,然后使用它来导入该模型并对其进行调用,例如创建数据库字段、更新、删除等。。。

    我原以为我可以用Django中的contenttypes来实现这一点,但我正在尝试,如下所示,并收到错误消息“'ContentType'object is not callable”:

        from django.contrib.contenttypes.models import ContentType
        instancemodelname = ContentType.objects.get(app_label="myappname", model="mymodelname")
    
        b = instancemodelname(account_username='testtestest')
        b.save()
        >>>>'ContentType' object is not callable
    

    2 回复  |  直到 15 年前
        1
  •  2
  •   Manoj Govindan    15 年前

    以下代码将起作用:

    instancemodelname = ContentType.objects.get(app_label="myappname", model="mymodelname")
    b = instancemodelname.model_class()(account_username='testtestest')
    b.save()
    

    也就是说,我并不完全相信contenttypes是实现你想要的最好的方式。

        2
  •  1
  •   Benjamin Wohlwend    15 年前

    不要使用ContentType模型。有一个函数正好适用于此用例,它不会生成数据库命中:

    from django.db.models import get_model
    mymodel = get_model("myappname", "mymodelname")
    b = mymodel(account_username='testtestest')
    b.save()