Получить _meta модели через отношения - PullRequest
0 голосов
/ 13 апреля 2020

У меня две модели. Я хотел бы передать одну из моделей в функцию, а затем передать функцию ManyToManyField для отображения полей связанной модели.

class Email(models.Model):
    subject = models.CharField(max_length=50)
    body = models.TextField()
    time_sent = models.DateTimeField(null=True, blank=True)
    recipients = models.ManyToManyField(Contact, related_name='emails')

class Contact(models.Model):
    email_address = models.EmailField()
    contact_name = models.CharField(max_length=50, null=True, blank=True)

Конечный результат будет выглядеть примерно так:

>>> get_fields_of_related_model(Email)
{'recipients': {'email_address': 'EmailField',
                'contact_name': 'CharField'}}
>>> get_fields_of_related_model(Contact)
{'emails': {'subject': 'CharField',
            'body': 'TextField',
            'time_sent': 'DateTimeField',
            'recipients': 'ManyToManyField'}}

1 Ответ

1 голос
/ 13 апреля 2020

Вы можете получить доступ к полям m2m следующим образом:

Email._meta.local_many_to_many

Затем вы можете получить соответствующие поля модели следующим образом:

Email._meta.local_many_to_many[0].related_model._meta.fields

Spitballing, как будет выглядеть функция:

def get_fields_of_related_model(model):
    return {m2m_field.name: m2m_field.related_model._meta.fields for m2m_field in model._meta.local_many_to_many}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...