【问题标题】:Django modelform not saving input choices and not returning errorsDjango modelform不保存输入选择并且不返回错误
【发布时间】:2016-02-23 03:08:59
【问题描述】:

我有一个模型表单,只有在所有字段都没有选择的情况下才有效(将输入数据保存到数据库)。当我介绍选择时,我没有收到任何错误,并且表格似乎有效,但没有保存任何内容。 我已经梳理了文档,我没有返回任何有用的东西。

我确信我需要在我的视图中做更多的事情来获得选定的输入选项,或者我需要向模型类添加一些方法。请指出正确的方向。

这是我的模型:

class OpeningHours(models.Model):
'''
'''
    class Meta:
        verbose_name = 'Opening Hour'
        verbose_name_plural = 'Opening Hours'
    #######################################################
    mytime = Bizhours()
    ################################################ 
    id = models.AutoField(primary_key=True)
    company =models.CharField(max_length=100, null=True, blank=True)
    weekday = models.CharField(max_length=100, choices=mytime.getweekdays(), default='Monday', null=True)
    fromHour = models.CharField(max_length=100, null=True, blank=True)
    fromMinute = models.CharField(max_length=100, null=True, blank=True)
    toHour = models.CharField(max_length=100, null=True, blank=True)
    toMinute = models.CharField(max_length=100, null=True, blank=True)
    '''
    id = models.AutoField(primary_key=True)
    company = models.ForeignKey(Company)
    weekday = models.IntegerField(choices=mytime.getweekdays())
    fromHour = models.TimeField(choices=mytime.gettime12())
    fromMinute = models.TimeField(choices=mytime.getminutes())
    toHour = models.TimeField(choices=mytime.gettime12())
    toMinute = models.TimeField(choices=mytime.getminutes())
    '''


    def __str__(self):
        return "%s %s (%s - %s)" % (self.company, self.weekday, self.fromHour, self.toHour)

这是我的看法

@login_required
def addprofile(request):
current_user = request.user
#OpeningHoursFormSet = modelformset_factory(OpeningHours, form=OpeningHoursForm,extra=1)

if request.session['entry_count'] > 1:
    messages.success( request, 'You can only create two business profiles now' )
    return HttpResponseRedirect( reverse('home') )
else:
    if request.method == 'POST':
        form = OpeningHoursForm(request.POST)

        if form.is_valid():
            model_instance = form.save(commit=False)
            model_instance.company ="thiscompany"
            model_instance.weekday = request.POST.get('weekday') 
            model_instance.save()
        else:
            print("problems saving edited form")

        return HttpResponseRedirect('/bizprofile/success')
    else: 
        form = OpeningHoursForm() 
        context = {'form': form}    
    return render_to_response('bizprofile/addprofile.html', context, context_instance=RequestContext(request))

这是表格

{% extends "bizprofile/bizprofilebase.html" %}

{% block content %}

{% if form.subject.errors %}
<ol>
{% for error in form.subject.errors %}
    <li><strong>{{ error|escape }}</strong></li>
{% endfor %}
</ol>
{% endif %}

{% if user.is_authenticated %}
    <p>Welcome, {{ user.get_username }}. Thanks for logging in.</p>

    <form method="post" action="">
    {% csrf_token %}
    <table>
    {{form}}
    </table>
    <input type="submit" value="Submit Form"/>
    </form>

{% else %}
    <p>Welcome, new user. Please log in.</p>
{% endif %}
{% endblock %}

【问题讨论】:

  • 你的表格在哪里?
  • 这是模型表单集的一部分,但我已将其缩小到此。我现在确定这是选择,因为没有它们我可以在数据库中看到保存的数据。
  • 你的get_week_day()函数返回什么?
  • def getweekdays(self): self.WEEKDAYS = [ (1, _("Monday")), (2, _("Tuesday")), (3, _("Wednesday") ), (4, _("Thursday")), (5, _("Friday")), (6, _("Saturday")), (7, _("Sunday")), ] 返回自我。工作日
  • 如果在将request.POST.get('weekday') 分配给model_instance 之前打印它,那么值是多少?此外,您使用 CharField 表示 weekday,但您的选择是整数 1~7。你应该把它改成IntegerField

标签: django python-3.x django-forms


【解决方案1】:

问题在于 OP 使用 CharField 作为工作日数据类型,但从函数返回的选项被定义为整数。由于它们不兼容,因此无法保存数据。

【讨论】:

    猜你喜欢
    • 2015-10-08
    • 1970-01-01
    • 2014-01-14
    • 1970-01-01
    • 1970-01-01
    • 2019-02-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多