Django 如何通过字符串引用模型列?

Django 如何通过字符串引用模型列?,django,django-models,Django,Django Models,我正在生成一个终端命令,用户在其中输入两个字符串。一个对应于模型,另一个对应于该模型中的列 class Command(BaseCommand): def add_arguments(self, parser): parser.add_argument( "--model", dest="model", required=True, ) def add_arguments(se

我正在生成一个终端命令,用户在其中输入两个字符串。一个对应于模型,另一个对应于该模型中的列

class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument(
            "--model",
            dest="model",
            required=True,
        )
    def add_arguments(self, parser):
        parser.add_argument(
            "--col",
            dest="col",
            required=True,
        )
def handle(self, *args, **options):
    # Handle stuff here

我知道我可以从django.apps导入应用程序,并在apps.get_model中放置选项[model],以获取用户输入的模型实例,假设它存在。但是如何引用用户在options[col]中输入的列呢?

首先,您应该删除重复的add\u参数方法。其次,您应该要求应用程序的名称,因为如果两个不同的应用程序共享相同的型号名称,会发生什么情况?如果这些相同的命名模型共享相同的字段名呢。此命令应应用于哪列

下面是一个接受应用程序参数的工作命令:

from django.core.management.base import BaseCommand, CommandError
from django.core.exceptions import FieldDoesNotExist
from django.apps import apps


class Command(BaseCommand):
    def add_arguments(self, parser):
        parser.add_argument(
            "--app",
            dest="app",
            required=True,
        )

        parser.add_argument(
            "--model",
            dest="model",
            required=True,
        )

        parser.add_argument(
            "--col",
            dest="col",
            required=True,
        )

    def handle(self, *args, **options):
        app_label = options.get('app')
        model_name = options.get('model')
        column_name = options.get('col')

        try:
            model = apps.get_model(app_label=app_label, model_name=model_name)
        except LookupError as e:
            msg = 'The model "%s" under the app "%s" does not exist!' \
                  % (model_name, app_label)
            raise CommandError(msg)
        try:
            column = model._meta.get_field(column_name)
        except FieldDoesNotExist as e:
            msg = 'The column "%s" does not match!' % column_name
            raise CommandError(msg)
        else:
            print(column, type(column))
            # Do stuff here with the column, model.