Как обновить данные в модели Django для случая заголовка в представлениях? - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь изменить столбец строк, таких как «HOSPITAL ZERO», «HOSPITAL ONE» из базы данных, в регистр заголовков или «Больница ноль» в views.py или models.py.Я пробовал оба, и не могу заставить ни работать на меня.

Вот мой код в views.py.Столбец находится в модели больницы под именем, т.е. Hospital.name.

def results(request):
    if request.method == "GET":
      Q=()
      out_words = request.GET.get('s')
      context = RequestContext(request)
      #here is where I tried to change it
      qs = Price.objects.annotate(hospital__name=Lower('hospital__name'))
      table = PriceTable(qs.filter(service__desc_us__icontains = out_words))
      RequestConfig(request, paginate={'per_page': 10}).configure(table)
      RequestConfig(request).configure(table)
    else:
      table = PriceTable(Price.objects.all())
      RequestConfig(request).configure(table)

    return render(request, 'results.html', {'table': table})

Вот как я пытался в model.py.

    class Hospital(models.Model):
        """Model representing Hospitals."""
        hid = models.CharField(max_length = 8, null=True)
        name = models.CharField(max_length=200, primary_key=True)
        hopid = models.UUIDField(default=uuid.uuid4, help_text='Unique ID for this particular hospital in database')
        address = models.CharField(max_length = 200, null = True)


        class Meta:
            ordering = ['hopid']
        #here is where i tried to update it
        def save(self, *args, **kwargs):
            self.name = self.name.title()
            return super(Hospital, self).save(*args, **kwargs)

        def __str__(self):
            """String for representing the Model object."""
            return f'{self.name} ({self.address})'

class Price(models.Model):
  """Model with all the hospital prices by service."""
  priceid = models.UUIDField(primary_key=True, default=uuid.uuid4, help_text='Unique ID for this particular service in database')
  comments = models.CharField(max_length = 200, blank = True, null =True)
  hospital = models.ForeignKey("Hospital", on_delete=models.SET_NULL, null=True)

  class Meta:
      ordering =['priceid']


  def __str__(self):
      return f'{self.hospital.name} (...)'

Ответы [ 3 ]

0 голосов
/ 25 февраля 2019

Вы можете попробовать это:

"HOSPITAL ONE".lower().capitalize()

my_string.lower().capitalize()

Вот вариант:

def save(self, *args, **kwargs):
        self.name = self.name.lower().capitalize()
        return super(Hospital, self).save(*args, **kwargs)
0 голосов
/ 25 февраля 2019

Просто добавьте метод к модели:

def get_title_case_name(self):
        return self.name.title()

В представлениях / шаблонах вы можете запустить этот метод для объекта модели.

0 голосов
/ 25 февраля 2019

Вот новый метод для вашей модели больницы, который называется get_title_case_name.Теперь вы можете получить доступ к названию больницы, позвонив по номеру hospital_instance.get_title_case_name().

class Hospital(models.Model):
    """Model representing Hospitals."""
    hid = models.CharField(max_length = 8, null=True)
    name = models.CharField(max_length=200, primary_key=True)
    hopid = models.UUIDField(default=uuid.uuid4, help_text='Unique ID for this particular hospital in database')
    address = models.CharField(max_length = 200, null = True)


    class Meta:
        ordering = ['hopid']

    def __str__(self):
        """String for representing the Model object."""
        return f'{self.name} ({self.address})'

    def get_title_case_name(self):
        return self.name.capitalize()
.
...