Как я могу создать файл с несколькими значениями без множества полей в django?

У меня есть модель:

class People(models.Model):
   family = models.CharField(null=True)
   phone_numbers = ?

Как я могу реализовать phone_numbers для некоторых телефонных номеров. Я думаю, что ManyToManyField не является хорошей идеей для этого.

Какова лучшая практика для этого?

Вы можете создать модель Phone и создать отношения "многие-к-одному" между Phone и People, используя ForeignKey. С помощью этого вы можете связать различные телефонные номера с одним человеком.

class People(models.Model):
    family = models.CharField(null=True)


class Phone(models.Model):
    number = models.CharField(max_length=15, unique=True)
    person = models.ForeignKey(People, on_delete=models.CASCADE)

Теперь, например, если у вас есть экземпляр People в переменной people, вы можете получить доступ к связанным с ним номерам телефонов с помощью values_list:

people.phone_set.values_list('number', flat=True)

Примечание для вашей модели, не рекомендуется использовать null=True к CharField/TextField. В официальной документации Django говорится следующее:

Избегайте использования null в строковых полях, таких как CharField и TextField. Если поле на основе строк имеет значение null=True, это означает, что у него есть два возможных значения для "нет данных": NULL и пустая строка. В большинстве случаев, иметь два возможных значения для "нет данных" излишне; по правилам Django, нужно использовать пустую строку, а не NULL. Исключением является случай, когда для поля CharField установлены значения unique=True и blank=True. В этой ситуации null=True необходим, чтобы избежать нарушения ограничения уникальности при сохранении нескольких объектов с пустыми значениями.

.

Вы также можете взглянуть на этот вопрос, в котором рассматривается мой последний пункт.

Также я не знаю, какую логику вы хотите применить к своему проекту, но я думаю, что лучшим способом организации ваших моделей и их отношений будет создание класса Family для работы с семействами типа:

class Family(models.Model):
    name = models.CharField(max_length=100)


class People(models.Model):
    family = models.ForeignKey(Family, blank=True, null=True)


class Phone(models.Model):
    number = models.CharField(max_length=15, unique=True)
    person = models.ForeignKey(People, on_delete=models.CASCADE)

С помощью этой дополнительной модели вы сможете создать еще одно отношение "многие-к-одному" между People и Family. В зависимости от ваших потребностей, вы должны адаптировать аргументы при создании полей, те, которые я предоставил, являются лишь примером.

Вернуться на верх