Django обнаруживает изменения нескольких полей в одной модели - PullRequest
0 голосов
/ 28 июня 2018

Я использую некоторые библиотеки javascript, которые не позволяют мне передавать self.full_name, созданный с использованием def full_name(self):

Хотите знать, как мне следует обновить поле full_name на основе изменений (или создания) любого из 3 полей имени.

class Employee(models.Model):
  first_name = StringProperty(max_length=25)
  middle_name = StringProperty(max_length=25)
  last_name = StringProperty(max_length=50)

  full_name = StringProperty(max_length=100)
  # lots of Icelanders have the same first and last name...
  full_name_includes_middle_name = BooleanProperty(default=False)

Прямо сейчас я изучаю @receiver, а created or update_fields выглядит многообещающе ...

@receiver(post_save, sender=Employee)
def update_full_name(sender, update_fields, created, instance, **kwargs):
  if instance.middle_name_is_part_of_full_name == True:
    if created or update_fields is 'first_name' or 'middle_name' or 'last_name':
      instance.full_name = instance.first_name + " " + instance.middle_name + " " + instance.last_name
      instance.save()
  else:
    if created or update_fields is 'first_name' or 'last_name':
      self.full_name = self.first_name + " " + self.last_name
      instance.save()

^ но это выдает ошибку:

update_full_name() missing 1 required positional argument: 'update_fields'

1 Ответ

0 голосов
/ 28 июня 2018

В этом случае нет различий между операцией создания или обновления.

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

@receiver(pre_save, sender=Employee)
def update_full_name(sender, instance, **kwargs):
  if instance.middle_name_is_part_of_full_name == True:
      instance.full_name = f"{instance.first_name} {instance.middle_name} {instance.last_name}"
  else:
      instance.full_name = f"{instance.first_name} {instance.last_name}"
...