У меня есть вид, который отображает все транзакции. У меня есть таблица с contractors
, и я хочу отобразить все строки из этой таблицы в параметрах <select>
. Как я могу это сделать?
Мой взгляд:
class TransactionView(CustomPermissionRequired, ListView):
# Переопределение из MultipleObjectMixin
model = Transaction
context_object_name = 'transactions'
paginate_by = 20
login_url = '/'
permission_required = (
'registration2.can_see_payments',
)
# Переопределение из TemplateResponseMixin
template_name = 'payments.html'
search_fields = [
('contractor_name', 'deal__service__contractor__name__icontains'),
('from_pay_date', 'payment_date__gte'),
('to_pay_date', 'payment_date__lte'),
('tr_id', 'id__icontains')
]
# Переопределение из MultipleObjectMixin
def get_queryset(self):
print('get_def')
filter_args = []
filter_kwargs = {}
for sf in self.search_fields:
if sf[0] is not None:
sf_value = self.request.GET.get(sf[0])
if sf_value:
filter_kwargs[sf[1]] = sf_value
return Transaction.objects.all().select_related('currency',
'payment_source__payment_type',
'deal__service__contractor'
).filter(*filter_args, **filter_kwargs).order_by('-id')
def get_context_data(self, **kwargs):
context = super(TransactionView, self).get_context_data(**kwargs)
for sf in self.search_fields:
if sf[0] is not None:
context[sf[0]] = self.request.GET.get(sf[0])
return context
Мои модели Transaction
и Contractors
:
class Transaction(models.Model):
id = models.BigIntegerField(blank=True, null=False, primary_key=True)
currency = models.ForeignKey(Currency, null=True, on_delete=models.CASCADE)
deal = models.ForeignKey(Deal, null=True, on_delete=models.CASCADE)
# service_instance = models.ForeignKey(ServiceInstance, null=True, on_delete=models.CASCADE)
payment_source = models.ForeignKey(PayerPaymentSource, null=True, on_delete=models.CASCADE)
payment_date = models.DateTimeField(blank=True, null=True)
amount = models.IntegerField(blank=True, null=True)
status = models.CharField(max_length=255, blank=True, null=True)
context = models.TextField(blank=True, null=True)
class Contractors(models.Model):
id = models.IntegerField(blank=True, null=False, primary_key=True)
name = models.CharField(max_length=255, blank=True, null=True)