Встречается на собеседованиях • сегодня

Как расширить стандартную модель в БД

Для расширения стандартной модели в Django можно использовать несколько подходов:

  1. Наследование моделей
    • Абстрактная модель (не создает отдельную таблицу):
    python
    class BaseModel(models.Model):
        created_at = models.DateTimeField(auto_now_add=True)
        updated_at = models.DateTimeField(auto_now=True)
    
        class Meta:
            abstract = True
    

class UserProfile(BaseModel):
user = models.OneToOneField(User, on_delete=models.CASCADE)
bio = models.TextField()

text

2. **Proxy-модель** (расширяет функциональность без изменения таблицы):  
```python
class ExtendedUser(User):
    class Meta:
        proxy = True

    def get_full_name(self):
        return f"{self.first_name} {self.last_name}"
  1. OneToOneField (для связи с существующей моделью):

    python
    class Profile(models.Model):
        user = models.OneToOneField(User, on_delete=models.CASCADE)
        phone = models.CharField(max_length=20)
  2. Монки-патчинг (динамическое добавление методов):

    python
    User.add_to_class('get_display_name', lambda self: f"{self.username.upper()}")

Выбор зависит от задачи: абстрактные модели для общих полей, proxy — для методов, OneToOne — для хранения доп. данных.

Sophi
Софи собрала все вопросы. Тренируйся и получай
офферы быстрее!
Попробовать бесплатноArrow

Следующий вопрос

Это единственный вопрос по вашему фильтру

как отвечать на вопрос
пример собеседования
фреймворки на собеседовании
типичные вопросы junior
интервью вопросы и ответы