【问题标题】:How i can create Model or form for Django admin that not create table in database ?我如何为不在数据库中创建表的 Django 管理员创建模型或表单?
【发布时间】:2019-05-01 02:55:47
【问题描述】:

这种技术在数据库中创建表,但我不想在数据库中创建表。

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)

还有什么办法可以解决这个问题?

【问题讨论】:

    标签: django django-models django-forms django-database


    【解决方案1】:

    您似乎需要使用您自己的自定义表单、视图和模板添加新的管理员网址:

    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 %}
    

    请参阅here 中提供的文档。

    【讨论】:

    • 但我不想在数据库中创建表。我只需要模型字段来获取数据和发送电子邮件。
    • 我如何在管理员中访问此表单?
    • 它应该可以在/admin/myapp/mymodel/my_view/ 获得
    • 我没有注册 SomeAdmin 模型。喜欢 admin.site.register(Someadmin)
    • 如果你有其他的ModelAdmin,那么你可以附加它。
    猜你喜欢
    • 1970-01-01
    • 2019-12-24
    • 2021-03-05
    • 2018-11-26
    • 1970-01-01
    • 2011-05-07
    • 1970-01-01
    • 2021-10-11
    • 2023-03-09
    相关资源
    最近更新 更多