Filyushin
@Filyushin
Python, Delphi, Firebird

Как в Django выполнить raw-запрос?

Есть вот такая модель:
class Orders(models.Model):
    id = models.AutoField(primary_key=True)
    idhospital = models.IntegerField(blank=True, null=True)
    idfinance = models.ForeignKey('RefFinance', db_column='idfinance')
    idtest = models.IntegerField(blank=True, null=True)
    iddiagprimary = models.IntegerField(blank=True, null=True)
    idbiomaterial = models.IntegerField(blank=True, null=True)
    iddiagsecondary = models.IntegerField(blank=True, null=True)
    ordertype = models.SmallIntegerField(blank=True, null=True)
    ordernum = models.CharField(max_length=100, blank=True)
    orderdate = models.DateTimeField(blank=True, null=True)
    orderprice = models.DecimalField(max_digits=15, decimal_places=2, blank=True, null=True)
    dategetbm = models.DateTimeField(blank=True, null=True)
    orderready = models.DateTimeField(blank=True, null=True)
    dategetorder = models.DateTimeField(blank=True, null=True)
    userready = models.CharField(max_length=30, blank=True)
    patient = models.CharField(max_length=1024, blank=True)
    iin = models.CharField(max_length=1024, blank=True)
    dob = models.DateTimeField(blank=True, null=True)
    sex = models.SmallIntegerField(blank=True, null=True)
    address = models.CharField(max_length=1024, blank=True)
    workplace = models.CharField(max_length=1024, blank=True)
    depart = models.CharField(max_length=1024, blank=True)
    sector = models.CharField(max_length=1024, blank=True)
    palata = models.CharField(max_length=1024, blank=True)
    numhistory = models.CharField(max_length=100, blank=True)
    isdelete = models.BooleanField()   
    class Meta:
        managed = False
        db_table = 'orders'

Для новой записи поле ordernum нужно сформировать по особому принципу. Принцип реализован в функцию в postgresql и может быть вызван как select getordernum(:idvalue). IdValue нужно передать перед выполнением запроса.
Хотелось бы получить нечто такое:
order = Orders(patient=fio)
order.idhospital  = ...
order. ... = ..
<b>order.ordernum  = Orders.GetNewNum</b>
  • Вопрос задан
  • 2498 просмотров
Решения вопроса 1
@silentboy13
ну вообще что то типа такого
Person.objects.raw('SELECT * FROM myapp_person')
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Filyushin
@Filyushin Автор вопроса
Python, Delphi, Firebird
Спустя несколько минут пришло озарение из офф.сайта проекта django
...
    class Meta:
        managed = False
        db_table = 'orders'
    def GetNumOrder(self, idOrder):
        from django.db import connection
        cursor = connection.cursor()
        cursor.execute("SELECT getordernum(%s) as id", [idOrder])
        row = cursor.fetchone()
        return row[0]
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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