Я сталкиваюсь со следующей ситуацией: у меня есть проект django, который использует внешнее приложение [App1]. В App1 он имеет следующую структуру:
абстрактный класс 'Base':
class Base(models.Model):
"""
Base model with boilerplate for all models.
"""
name = models.CharField(max_length=200, db_index=True)
alternate_names = models.TextField(null=True, blank=True,
default='')
..............
..............
class Meta:
abstract = True
def __str__(self):
display_name = getattr(self, 'display_name', None)
if display_name:
return display_name
return self.name
абстрактный класс, основанный на «Base», называется «AbstractClassA»:
class AbstractClassA(Base):
display_name = models.CharField(max_length=200)
....
....
class Meta(Base.Meta):
abstract = True
def get_display_name(self):
....
....
return ....
Неабстрактный класс класса ClassA (AbstractClassA)
Теперь, когда я делаю запрос в моем представлении для этого ClassA, например:
qs = ClassA.objects.filter(Q(name__icontains=query_term)....)
return qs
Я передаю эти qs в другое внешнее приложение (автозаполнение), так что, когда я вписываю 'xxxx' в свою веб-форму, форма дает мне предложения о доступных совпадениях в БД на основе этой qs.
Все это прекрасно работает, единственное, список потенциальных совпадений, который мне показан, - это представление объектов ClassA по умолчанию, которое я проследил до
def __str__(self):
display_name = getattr(self, 'display_name', None)
if display_name:
return display_name
return self.name
определено в базовой абстрактной модели, о которой я упоминал ранее. Я хочу, чтобы в списке потенциальных совпадений отображалось что-то еще (например, вместо «display_name» или «name», покажите мне «fieldA» + «;» + «fieldB» каждого отфильтрованного элемента в qs).
Я думал о том, чтобы где-то переопределить этот __str__
метод. Но поскольку как исходные, так и последующие аспекты моего процесса выполняются во внешних приложениях, которые я не хочу напрямую изменять (т.е. копировать напрямую в мой проект Django и переписывать определенные части), я не уверен, как мне достичь своей цели .
Есть ли какой-нибудь элегантный способ сделать это?
Пожалуйста, дайте мне знать, если что-то неясно, или я мог бы предоставить вам любую дополнительную информацию. Спасибо!