带有外键的Django模式提交表单不起作用

时间:2019-12-07 15:52:34

标签: django django-views foreign-keys bootstrap-modal

我有一个在Bootstrap模式中填充的模型,我使用基于类的视图来呈现表单并将其提交到数据库,但是,当我单击“保存”时,我得到一个错误:

AttributeError at /create_startupaboutform/
'WSGIRequest' object has no attribute 'Startup'

我不确定是否正确分配了FK,但是,对于Startup模型,它在函数视图中可以正常工作,而对于基于类的视图,则不能。这是我的代码,感谢您的反馈。

model.py:

class Startup ( models.Model ) :
    author = models.OneToOneField ( User , on_delete = models.CASCADE )
    startup_name = models.CharField ( 'Startup Name' , max_length = 32 , null = False , blank = False )

class Startup_About ( models.Model ) :
    str_about = models.ForeignKey ( Startup , on_delete = models.CASCADE )
    about = models.TextField ( 'About Startup' , max_length = 2000 , null = False , blank = False )
    problem = models.TextField ( 'Problem/Opportunity' , max_length = 2000 , null = False , blank = False )
    business_model = models.TextField ( 'Business Monitization Model' , max_length = 2000 , null = False ,blank = False )
    offer = models.TextField ( 'Offer to Investors' , max_length = 2000 , null = False , blank = False )

forms.py:

class startupform(forms.ModelForm):
    class Meta:
        model = Startup
        fields = ('startup_name',)
        widgets = {
            'startup_name': forms.TextInput(attrs = {'class':'form-control'}),
        }

class startupaboutform(forms.ModelForm):
    class Meta:
        model = Startup_About
        fields = ('about','problem','business_model','offer','str_about',)
        widgets = {
            'about' : forms.Textarea ( attrs = { 'class' : 'form-control' } ) ,
            'problem' : forms.Textarea ( attrs = { 'class' : 'form-control' } ) ,
            'business_model' : forms.Textarea ( attrs = { 'class' : 'form-control' } ) ,
            'offer' : forms.Textarea ( attrs = { 'class' : 'form-control' } ) ,

        }

view.py:

decorators = [str_required, login_required]

@method_decorator(login_required, name='dispatch')
@method_decorator(str_required, name='dispatch')
class create_startupaboutform(CreateView):
    template_name = 'create_about.html'
    form_class = startupaboutform
    success_url = '/str_detailedview/'

    def form_valid(self, form):
        form.instance.str_about = Startup_About.objects.filter(str_about=self.request.Startup)
        return super(create_startupaboutform, self).form_valid(form)

urls.py:

urlpatterns = [
    path ( 'appwizard/' , views.applicationwizard , name = 'appwizard' ) ,
    path ( 'create_startupform/' , views.create_startupform, name = 'create_startupform' ),
    path('create_startupaboutform/', views.create_startupaboutform, name='create_startupaboutform'),
      ]

模板-HTML模式触发按钮:

{% load static %}
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="{% static 'assets/bootstrap/css/bootstrap.min.css' %}">

</head>
<body>


<a href="#"  id="btn" class="btn btn-info btn-lg">Open Modal</a>


{% include "create_about.html" %}


<script src="{% static 'assets/js/jquery.min.js' %}"></script>
    <script src="{% static 'assets/bootstrap/js/bootstrap.min.js' %}"></script>

<script>
     $(document).ready(function(){
             $("#btn").on("click", function(){
                 $("#form").load("/create_startupaboutform/", function(){
                 $("#about").modal("show");
             });
             });
     });
</script>

</body>
</html>

模板-HTML模式形式:

<form id="form" method="post" action="{% url 'create_startupaboutform' %}">
    {% csrf_token %}
<div class="modal fade" id="about" role="dialog" tabindex="-1">
    <div class="modal-dialog" role="document">
        <div class="modal-content">
            <div class="modal-header">
                <h4 class="modal-title">Modal Title</h4>
                <button type="button" class="close" data-dismiss="modal" aria-label="Close"><span
                        aria-hidden="true">×</span></button>
            </div>
            <div class="modal-body">
                {{form}}
            </div>
            <div class="modal-footer">
                <button class="btn btn-light" type="button" data-dismiss="modal">Close</button>
                <button class="btn btn-primary" type="submit">Save</button>
            </div>
        </div>
    </div>
</div>
</form>

0 个答案:

没有答案