Как передать id записи в модель django?
подскажите пожалуйста. Делаю небольшое приложение, и мне надо передать id записи в поле url, и не могу понять как это сделать. Есть вот такая модель, в целом в этой модели все меня устраивает, единственное, мне надо по дефолту для каждой записи формировать ссылку http://127.0.0.1:8000/saverout/{id записи}, не могу понять как передать сюда id.
class Rout_car(models.Model):
YES = 'Да'
NO = 'Нет'
YENO_CHOICES = [
(YES, 'ДА'),
(NO, 'НЕТ'),
]
car_where_in = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Откуда',null=True)
car_where_out = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Куда', null=True, related_name='car_where_out_related')
rout_driver = models.ManyToManyField(RusRegions, verbose_name='Маршрут по регионам')
car_driver = models.ForeignKey(Driver, on_delete=models.CASCADE, null=True, verbose_name='Водитель')
car_track = models.ForeignKey(Track, on_delete=models.CASCADE, null=True, verbose_name='Тягач')
car_trailer = models.ForeignKey(Trailer, on_delete=models.CASCADE, null=True, verbose_name='Прицеп')
promezhutok_punkt = models.CharField(max_length=3, choices=YENO_CHOICES, verbose_name='Адреса промежуточных пунктов', null=True)
car_parking = models.CharField(max_length=100,choices=YENO_CHOICES ,verbose_name='Места стоянок', null=True)
car_gas_station = models.CharField(max_length=3, choices=YENO_CHOICES,verbose_name='Места заправок топливом', null=True)
contr_agent = models.ForeignKey(Contragent,on_delete=models.CASCADE,verbose_name='Контрагент', null=True, related_name='contr_agent_related') # Позже добавлю справочник обработки
car_date = models.DateField(auto_now=False, null=True, verbose_name='Дата отправления')
url_doc = models.URLField(default=f'http://127.0.0.1:8000/saverout/{id}')
Ответы (2 шт):
Возможно вам не нужно использовать url field, определите функцию get_absolute_url() в классе (написал бы коментарий но не могу).
def get_absolute_url(self):
return reverse('car', kwargs={'id': self.pk}) # Первый параметр - имя вашего маршрута, например path('', views.index, name="car")
Эта функция используется django чтобы выдавать url на запись в базе данных. И если вы пытаетесь узнать этот url из шаблона вы можете:
{{car.get_absolute_url}}
Но если вам нужно сохранять именно url, то мой ответ вам скорее всего не поможет.
Или попробуйте написать:
url_doc = models.URLField(default=f'http://127.0.0.1:8000/saverout/{self.pk}')
Даниэль, возможно вы имели ввиду что то типа этого: В admin.py
@admin.display(description='Сформировать документ')
def savedocx(self, rout: Rout_car):
return f'http://127.0.0.1:8000/saverout/{rout.pk}'
Не знаю на сколько правильно так делать, но теперь все работает, спасибо вам большое