Задать вопрос
@shvets2

Как указать поле в Django-модели для ForeignKey?

Всем привет. Есть модели Restaurant (ресторан) и RestaurantKitchen (типы кухни). В модели Restaurant есть поле kitchen, которое ссылается на модель RestaurantKitchen с помощью ForeignKey. Но когда выбираю данные из БД с помощью модели Restaurant, в поле kitchen почему-то указываются цифры, вместо кухни (европейская, итальянская и т.д). Код обоих моделей приведен ниже.

class Restaurant(models.Model):
    is_open = models.BooleanField(default=True, verbose_name='Открыто')
    title = models.CharField(max_length=120, db_index=True, verbose_name='Название')
    slug = models.SlugField(max_length=50, unique=True, help_text=('Используется для создания ЧПУ. '
                                                                   'Можно использовать только маленькие английские '
                                                                   'буквы, цифры и дефис'),
                            verbose_name='ID для ЧПУ')
    description = models.TextField(default='', validators=[MinLengthValidator(240)],
                                   help_text='Описание должно быть не короче 240 символов', verbose_name='Описание')
    average_bill = models.SmallIntegerField(default=0, validators=[MinValueValidator(100), MaxValueValidator(10000)],
                                            help_text='Средний чек должен быть от 100 ₽ до 10 000 ₽',
                                            verbose_name='Средний чек')
    kitchen_first = models.ForeignKey('RestaurantKitchen', on_delete=models.CASCADE, null=True,
                                      related_name='%(app_label)s_%(class)s_first', verbose_name='Кухня (1)')
    kitchen_second = models.ForeignKey('RestaurantKitchen', on_delete=models.CASCADE, null=True, blank=True,
                                       related_name='%(app_label)s_%(class)s_second', verbose_name='Кухня (2)')
    kitchen_third = models.ForeignKey('RestaurantKitchen', on_delete=models.CASCADE, null=True, blank=True,
                                      related_name='%(app_label)s_%(class)s_third', verbose_name='Кухня (3)')
    # График работы
    monday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                              help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Понедельник')
    tuesday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                               help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Вторник')
    wednesday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                                 help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Среда')
    thursday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                                help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Четверг')
    friday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                              help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Пятница')
    saturday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                                help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Суббота')
    sunday = models.CharField(max_length=30, default='', validators=[RegexValidator(regex=RESTAURANT_DAY_REGEX)],
                              help_text=RESTAURANT_DAY_HELP_TEXT, verbose_name='Воскресенье')
    # Контакты
    address = models.CharField(max_length=255, verbose_name='Адрес')
    phone = models.CharField(max_length=20,
                             validators=[RegexValidator(regex=RESTAURANT_PHONE_REGEX)],
                             help_text='Пример: +7 346 200-00-00', verbose_name='Номер телефона')
    website = models.URLField(null=True, blank=True, verbose_name='Сайт')
    vkontakte = models.URLField(null=True, blank=True, verbose_name='ВКонтакте')
    instagram = models.URLField(null=True, blank=True, verbose_name='Инстаграм')
    email = models.EmailField(null=True, blank=True, verbose_name='Эл. почта')


class RestaurantKitchen(models.Model):
    name = models.CharField(max_length=30, unique=True, verbose_name='Наименование')

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = 'кухня'
        verbose_name_plural = 'кухни'
        ordering = ['name']
  • Вопрос задан
  • 401 просмотр
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 1
@FulTupFul
Таблица Restaurant ссылается на RestaurantKitchen при помощи id. Чтобы получить значение поля name вам нужно на него сослаться
res = Restaurant.objects.latest()
res.kitchen_first.name
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы