Я использую formtools (https://github.com/jazzband/django-formtools), чтобы предварительно просмотреть данные формы перед их отправкой. Ниже приведен код, над которым я работаю.
models.py
class Invoice(Model):
issue_date = DateField()
due_date = DateField()
description = CharField(max_length=200)
project = ForeignKey(Project, on_delete=CASCADE)
currency = CharField(max_length=3, choices=CURRENCY_CHOICES, default='eur')
amount = DecimalField(blank=True, null=True, max_digits=100, decimal_places=2)
preview.py
class InvoiceFormPreview(FormPreview):
def done(self, request, cleaned_data):
invoice = Invoice.objects.create(**cleaned_data)
success_url = reverse("finance:list-invoices")
return HttpResponseRedirect(success_url)
urls.py
path('invoice/', InvoiceFormPreview(InvoiceForm)),
С помощью обычного ModelForm я могу добавить набор запросов к внешнему ключу Project
, чтобы отображать только те проекты, которые принадлежат зарегистрированному пользователю, например,
class InvoiceForm(ModelForm):
def __init__(self, user, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['project'].queryset = Project.objects.filter(projectuser__user=user.id)
Как бы я go добавил, что self.fields....
на InvoiceFormPreview
? Похоже, что существует метод get_initial
, доступный для использования, но не уверен, как он работает