Wagtail Custom FieldPanel
Возьмем, к примеру, магазин мороженого для использования формы Django в Wagtail. Я придумала решение, позволяющее посетителям отправлять свои предложения, а затем редактору отвечать в части кода. Проблема, с которой я столкнулся, заключается в том, что я хотел бы представить предоставленную информацию только для чтения или абзац, который требует от меня написания пользовательской FieldPanel. Однако я не мог понять, как я могу написать код и определить CustomFieldPanel, который показывает модель (например, CharFeild) в качестве элемента абзаца. ниже код, который я получил софар:
@register_snippet
class IceCreamFlavour(models.Model):
flavour_name = models.CharField(max_length=255)
your_name = models.CharField(max_length=255)
response = models.CharField(max_length=255, blank=True)
panels = [
MyCustomFieldPanel('your_name'),
MyCustomFieldPanel('flavour_name'),
FieldPanel('response')
]
@property
def get_response(self):
notice = ""
if self.response in [None, ""]:
notice = "NEEDS ATTENTION: "
return notice
def __str__(self):
return '{}{} - {}'.format(
self.get_response,
self.flavour_name,
self.your_name,
)
class FlavourSuggestionPage(Page):
intro = RichTextField(blank=True)
thankyou_page_title = models.CharField(
max_length=255, help_text="Title text to use for the 'thank you' page")
# Note that there's nothing here for specifying the actual form fields -
# those are still defined in forms.py. There's no benefit to making these
# editable within the Wagtail admin, since you'd need to make changes to
# the code to make them work anyway.
content_panels = Page.content_panels + [
FieldPanel('intro', classname="full"),
FieldPanel('thankyou_page_title'),
]
def serve(self, request):
from .forms import FlavourSuggestionFrom
if request.method == 'POST':
form = FlavourSuggestionFrom(request.POST)
if form.is_valid():
flavour = form.save()
return render(request, 'home/thankyou.html', {
'page': self,
'flavour': flavour,
})
else:
form = FlavourSuggestionFrom()
return render(request, 'home/suggest.html', {
'page': self,
'form': form,
})