【问题标题】:django form not submitting due to slug and foreign key由于 slug 和外键,django 表单未提交
【发布时间】:2019-11-16 02:18:27
【问题描述】:

我的 django 小屋表单没有提交。我在我的小屋模型中应用了外键和 slug,之后我的表格停止提交。每当我输入所有字段并点击提交按钮时,表单页面都会重新加载并且没有数据提交。最重要的是它没有显示任何错误,以便我可以修复它。我已经尝试并搜索了很多关于它并尝试过不同的东西,但它仍然没有工作。我坚持下去。请帮忙!!

class Centre(models.Model):
    name= models.CharField(max_length=50, blank=False, unique=True)
    address = models.CharField(max_length =250)
    phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$',
                             message="Phone number must be entered in the format: '+999999999'. Up to 10 digits allowed.")
    contact = models.CharField(max_length=100, blank=False)
    phone = models.CharField(validators=[phone_regex], max_length=10, blank=True)  # validators should be a list
    slug = models.SlugField(unique=False)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.name)
        super(Centre, self).save(*args, **kwargs)


  class Cabin(models.Model):
     random_string = str(random.randint(100000, 999999))
     centre_name = models.ForeignKey(Centre, on_delete=models.CASCADE,blank=True,null=True)
     code = models.CharField(max_length=6, blank=False, unique=True, default=random_string)
     total_seats = models.IntegerField(blank='False')
     category=models.CharField(max_length=100, default=False)
     booked_date=models.DateField(blank='False')
     released_date=models.DateField(blank='False')
     price=models.IntegerField(blank=False, default=None)
     slug = models.SlugField(unique=False,default=None)

    def save(self, *args, **kwargs):
        self.slug = slugify(self.category)
        super(Cabin, self).save(*args, **kwargs)


 In views.py file

 class CabinCreateView(CreateView):
     fields = '__all__'
     model = Cabin
     success_url = reverse_lazy("NewApp:logindex")


    def form_valid(self, form):
        self.object = form.save(commit=False)
        self.object.cabin = Cabin.objects.filter(slug=self.kwargs['slug'])[0]
        self.object.save()
        return HttpResponseRedirect(self.get_success_url())


   In my cabin template,

   <div class="row">
                                        <div class="col-md-6">
                                            <form method="POST">
                                             {% csrf_token %}
                                                {{ form.non_field_errors }}

                                                <div class="col col-md-12">
                                                <div class="fieldWrapper" >
                                                {{ form.centre_name.errors }}
                                                    <div class="form-group col col-md-3">
                                                        <label>Centre Name</label>
                                                        {{form.centre_name}}
                                                </div>

                                                <div class="form-group col col-md-3" style="float:right; margin-top=-80px;width=200%">
                                                    <label for="{{form.code.id_for_label}" style="margin-left:200px;width:200%;white-space:nowrap;">Code</label>
                                                     <input type="text" placeholder="Code" value="{{form.code.value}}" name="code" maxlength="6" id="id_code" style="width:500px; margin-left:200px;">
                                                </div>

                                                </div>

                                                <div class="col col-md-12">
                                                 <div class="form-group col col-md-3" style="float:right; margin-top=-80px;">
                                                <label for="{{form.total_seats.id_for_label}" style="margin-left:200px;width:200px;white-space:nowrap;">seats</label>
                                                 <input type="text" placeholder="seats" name="total_seats" id="id_total_seats" style="width:500px; margin-left:200px;">
                                                 </div>

                                                    <div class="fieldWrapper" >
                                                {{ form.category.errors }}

                                                 <div class="form-group col col-md-3" >

                                                    <label for="{{form.category.id_for_label}" style="margin-top:-40px">Category</label>
                                                <input type="text" name="category"  maxlength="100" id="id_category" placeholder="Category" style="width:500px";>
                                                 </div></div></div>

                                                <div class="col col-md-12">


                                                    <div class="fieldWrapper" >
                                                {{ form.released_date.errors }}

                                                 <div class="form-group col col-md-3" style="float:right; margin-top=-80px;">
                                                <label for="{{form.released_date.id_for_label}" style="margin-left:200px;width:200px;white-space:nowrap;">released date</label>
                                                 <input type="text" placeholder="%yyyy-mm-dd" name="released_date" id="id_released_date" style="width:500px; margin-left:200px;">
                                                 </div>
                                                    </div>

                                                <div class="fieldWrapper" >
                                                {{ form.booked_date.errors }}

                                                 <div class="form-group col col-md-3" >
                                                    <label for="{{form.booked_date.id_for_label}" style="margin-top:-40px">booked date</label>
                                                <input type="text" name="booked_date"   id="id_booked_date"  placeholder="%yyyy-mm-dd" style="width:500px";>
                                                 </div>
                                                    </div>

                                                 </div>


                                        <div class="col col-md-12">


                                        <div class="form-group col col-md-3" >
                                                    <label for="{{form.price.id_for_label}" style="margin-top:-40px">price</label>
                                                <input type="text" name="price"  maxlength="10" id="id_price" placeholder="in rupees" style="width:500px";>
                                                 </div>
                                            </div>
                                                <div class="form-group col col-md-3" >

                                                <input type="submit"  onclick="comparedate()" value="Save" class="btn btn-primary" style=" height:30px;width:80px;padding-bottom:2em;"/>
                                                </div></div>

                                                </form>


                                        </div></div></div></div></div></div></div></div></div></div>

【问题讨论】:

    标签: django forms slug


    【解决方案1】:

    您的问题似乎出在您的 views.py 文件中。您正在告诉视图它应该构建一个包含模型上字段的__all__ 的表单,但在您的模板中您不包含slug 字段。由于您已经覆盖了Cabin 模型上的save 方法来填充slug 字段,我猜您不希望它显示在模板中。

    您有两个选项可以解决此问题。您可以向包含 slug 字段的模板添加一个隐藏字段。或者,我认为更好的选择是,您可以更改视图上的 fields 属性以排除 slug 字段。

     class CabinCreateView(CreateView):
         fields = ('centre_name', 'code', 'total_seats', 'category', 'booked_date', 'released_date', 'price',)
         model = Cabin
         success_url = reverse_lazy("NewApp:logindex")
    

    附:这不是您要问的问题,但我不禁注意到您的模板中有多个损坏的变量。您可能需要检查您的标签 for="" 属性是否按预期工作。

    【讨论】:

      猜你喜欢
      • 2020-12-30
      • 2018-10-28
      • 2012-03-09
      • 2019-03-08
      • 1970-01-01
      • 1970-01-01
      • 2013-11-04
      相关资源
      最近更新 更多