4

モデルクエリセットから関連フィールドのタイプを取得できますか?

モデル例を考えてみましょう:

class Semester(models.Model):
    active = models.BooleanField(default=False, verbose_name="Active")

class Subject(models.Model):
    name = models.CharField(max_length=100, verbose_name="Name")
    semester = models.ForeignKey(Semester, verbose_name="Semester")

変数とクエリセットにフィールド名がある場合、これを行うことができます:

querySet = Subject.objects.all()

some_field_name = 'name'
field_type = querySet.model._meta.get_field(some_field_name).get_internal_type()

関連するフィールド タイプを取得する方法はありますか。次に例を示します。

querySet = Subject.objects.all()

some_field_name = 'semester__active'
field_type = ?
4

2 に答える 2

2

使用してみてくださいget_field_by_name

field_type = querySet.model._meta.get_field_by_name(some_field_name).get_internal_type()

Django のソース コードから:

def get_field_by_name(self, name):
    """
    Returns the (field_object, model, direct, m2m), where field_object is
    the Field instance for the given name, model is the model containing
    this field (None for local fields), direct is True if the field exists
    on this model, and m2m is True for many-to-many relations. When
    'direct' is False, 'field_object' is the corresponding RelatedObject
    for this field (since the field doesn't have an instance associated
    with it).

    Uses a cache internally, so after the first access, this is very fast.
    """

また試してください:

field = querySet.model._meta.get_field_by_name("semester")
field_type = field[0].rel.to._meta.get_field_by_name("active").get_internal_type()
于 2013-03-29T13:45:40.313 に答える
1

助けてくれてありがとう!

私はこの答えからいくつかの助けを借りて解決策を見つけます:

main, related = some_field_name.split("__")
field_type = querySet.model._meta.get_field(main).rel.to._meta.get_field(related).get_internal_type()
于 2013-03-29T14:27:54.660 に答える