【问题标题】:Django model is not saving to DatabaseDjango 模型未保存到数据库
【发布时间】:2020-07-11 09:44:58
【问题描述】:

我有一个非常简单的模型,只包含四个字段:meeting_datemeeting_hourparticipant_nameparticipant_email。我正在向参与者发送有关所选数据、小时数的电子邮件,它有效。但是这个时间表没有写入数据库。这是我的代码:

views.py:

def index(request):
    context = {
        'schedules': Schedule.objects.all()
    }
    participant_name = request.POST.get('name')
    participant_email = request.POST.get('email')
    meeting_date = request.POST.get('date')
    meeting_hour = request.POST.get('hour')
    subject = 'Görüş'
    message = 'Hello ' + str(participant_name) + '. \nDate: ' + str(meeting_date) + ' hour ' + str(meeting_hour).
    from_email = settings.SERVER_EMAIL
    recipient_list = [participant_email]
    send_mail(subject, message, from_email, recipient_list)
    if request.POST.get('participant_email'):
        Schedule.objects.create(
            participant_name = request.POST.get('name'),
            participant_email = request.POST.get('email'),
            meeting_date = request.POST.get('date'),
            meeting_hour = request.POST.get('hour')
        )
    return render(request, 'index.html', context)

admin.py:

class ScheduleAdmin(admin.ModelAdmin):
    list_display = ['participant_name', 'participant_email', 'is_scheduled', 'meeting_date', 'meeting_hour']

admin.site.register(Schedule, ScheduleAdmin)

models.py:

class Schedule(models.Model):
    participiant_name = models.CharField(max_length=100)
    participiant_email = models.CharField(max_length=100)
    meeting_date = models.DateField()
    meeting_hour = models.TimeField()
    is_scheduled = models.BooleanField(default=False)

    def __str__(self):
        return self.meeting_date

html:

<form action="{% url 'index' %}" method="POST">
                {% csrf_token %}
                <div class="form-group">
                    <label for="name">Name</label><br/>
                    <input type="text" name="name" id="name" placeholder="Name">
                </div>
                <div class="form-group">
                    <label for="email">Email</label><br/>
                    <input type="email" name="email" id="email" placeholder="Email"> 
                </div>
                <div class="form-group">
                    <label for="date">Date</label><br/>
                    <input type="date" name="date">
                </div>
                <div class="form-group">
                    <label for="hour">Saat</label><br/>
                    <select name="hour" id="hour">
                        <option value="1">Hour</option>
                        <option value="14:00">14:00</option>
                        <option value="15:00">15:00</option>
                        <option value="16:00">16:00</option>
                        <option value="17:00">17:00</option>
                        <option value="18:00">18:00</option>
                    </select>
                </div>
                <div class="form-group">
                    <button type="submit">Save</button>
                </div>
            </form>

【问题讨论】:

  • 似乎没有创建日程安排,因为您将 meeting_date 和 meeting_hour 作为字符串传递,但模型将这两个字段定义为 DateField 和 TimeField。还可以考虑为 Schedule 创建 ModelForm,因为它会为您验证用户输入。
  • @Yellowduck 你说我将日期作为字符串发送。它发生在哪里?我应该在哪里进行更改?顺便说一句,我尝试过 ModelForm 方法,但不知道 TimeField 使用什么。有没有可以选择小时和分钟的小部件?

标签: python django django-models django-views django-database


【解决方案1】:

request.POST.get('date')request.POST.get('hour') 是字符串,因此您需要将它们转换回 datehour,如下所示:

from datetime import datetime

converted_meeting_date = datetime.strptime(request.POST.get('date'), "%Y-%m-%d")
converted_meeting_hour = datetime.strptime(request.POST.get('hour'), "%H:%M")

请注意,日期和小时格式必须与您的 POST 数据中的格式保持一致,转换后您应该能够创建 Schedule 对象:

 Schedule.objects.create(
            participant_name = request.POST.get('name'),
            participant_email = request.POST.get('email'),
            meeting_date = converted_meeting_date,
            meeting_hour = converted_meeting_hour 
        )

【讨论】:

  • 伙计,我尝试了你的方法,但出现错误:strptime() argument 1 must be str, not None
  • 你确定你正确地传递了参数吗?错误表明您的 request.POST.get('date')request.POST.get('hour') 正在返回 None
  • 伙计,你好,祝你有美好的一天。你能检查一下我的这个问题stackoverflow.com/questions/61156491/… 吗?最近几天我的问题很少有人问,并且无法标记某人。请帮帮我。
猜你喜欢
  • 2021-06-28
  • 1970-01-01
  • 1970-01-01
  • 2023-03-28
  • 2016-07-07
  • 1970-01-01
  • 2021-05-03
  • 2021-08-13
  • 2018-10-10
相关资源
最近更新 更多