Используйте метод модели в классе и переопределите этот метод
У меня есть метод complete в моей модели, как я могу использовать его в представлении моего класса, в методе моей модели есть один параметр под названием person, который передается, я не хочу, чтобы мой переопределенный метод использовал этот параметр. чтобы переопределенный метод использовал этот параметр, как я могу этого добиться.
class Mymodel(models.Model):
is_done = model.BooleanField()
def complete(self, person):
self.is_done = True
self.save(update_fields=['is_done'])
self.done_by.add(person)
class MyView(SomeView):
def complete_record(self):
return Mymodel.complete(here it expects two arguments i need only self)
и я хочу избавиться от self.done_by.add(person) в полной модели метод
Метод complete()
может быть вызван для одного экземпляра модели (одного объекта кверисета).
В представлении, возможно, вы хотите сделать это, если у вас есть параметр id в url:
instance = Mymodel.objects.get(pk=self.kwargs['id'])
instance.complete()
или сценарий может быть таким, если вы используете DetailView:
self.get_object().complete()
-- РЕДАКТИРОВАТЬ --
.
Если вы хотите установить is_done = True
без добавления человека и
если вы не можете редактировать класс модели, вы можете поместить логику в представление:
class MyView(SomeView):
def complete_record(self):
record = Mymodel.objects.get(pk=id)
record.is_done = True
record.save()
return record
Вы можете добавить второй метод к вашей Модели, который не использует аргумент person.
models.py
class Mymodel(models.Model):
is_done = model.BooleanField()
def complete(self, person):
self.is_done = True
self.save(update_fields=['is_done'])
self.done_by.add(person)
def complete_without_person(self):
self.is_done = True
self.save(update_fields=['is_done'])
Метод должен быть вызван для конкретного экземпляра вашей модели в вашем представлении.
class MyView(SomeView, model_id):
def complete_record(self):
return Mymodel.objects.get(pk=model_id).complete_without_person()