Как я могу создать модель или форму для администратора Django, которые не создают таблицы в базе данных? - PullRequest
0 голосов
/ 29 ноября 2018

Этот метод создает таблицу в базе данных, но я не хочу создавать таблицу в базе данных.

class Email(models.Model):
      to = models.EmailField(null = False)
      subject = models.CharField(max_length =  255,  null = False)
      message = models.TextField(max_length =  555, null = False,) 

class EmailAdmin(admin.ModelAdmin):
      list_display = ('to','subject','message',)

      #Here i can send emails to users. 
      def save_model(self, request, obj, form, change):
          #I commented this line because i don't want to store this model into database.
          #super(MyAdminView, self).save_model(request, obj, form, change)


admin.site.register(Email,EmailAdmin)

Есть ли другой способ решения этой проблемы?

1 Ответ

0 голосов
/ 29 ноября 2018

Похоже, вам нужно добавить новые URL-адреса администратора с вашей собственной настроенной формой, представлением и шаблоном:

from django.core.mail import send_mail


class EmailForm(forms.Form):
    subject = forms.CharField()
    message = forms.CharField()
    to = forms.EmailField()

    def send_email(self):
       send_mail(
             self.cleaned_data.get('subject'),
             self.cleaned_data.get('message'),
             'from@example.com',
             [self.cleaned_data.get('to')],
             fail_silently=False,
        )

class SomeAdmin(admin.ModelAdmin):  # You need to override an ModelAdmin
    def get_urls(self):
        urls = super().get_urls()
        my_urls = [
            path('my_view/', self.my_view),
        ]
    return my_urls + urls

def my_view(self, request):
    if request.method == "GET":
         return render(request, 'template.html', {'form': EmailForm()}
    else:
       form = EmailForm(request.POST)
       if form.is_valid():
          form.send_email()
          # rest of your view
# Template

{% extends "admin/base_site.html" %}
{% block content %}
   <form method="post">
     {% csrf_token %}
     {{ form.as_p }}
   </form>
{% endblock %}

Пожалуйста, ознакомьтесь с документацией, доступной в здесь .

...