Django-使用TimeField()作为外键

问题描述 投票:0回答:2

我有一个Meeting模型,其中meeting_hourMeetingHour模型中获取其值。但是提交表单后出现以下错误:

Cannot assign "datetime.time(14, 0)": "Meeting.meeting_hour" must be a "MeetingHour" instance.

我知道它是因为我没有正确使用MeetingHour作为外键,但是不知道如何解决。这是我的代码:

models.py

class MeetingHour(models.Model):
    hour = models.TimeField()

    def __str__(self):
        return self.hour

class Meeting(models.Model):
    participant_name = models.CharField(max_length=50)
    participant_email = models.EmailField(max_length=50)
    meeting_date = models.DateField()
    meeting_hour = models.ForeignKey(MeetingHour, on_delete = models.CASCADE)
    is_scheduled = models.BooleanField(default=False)

    def __str__(self):
        return self.participant_name

views.py

def index(request):
    context = {
        'schedules': Meeting.objects.all()
    }
    if request.method == "POST":
        participant_name = request.POST.get('name')
        participant_email = request.POST.get('email')
        meeting_date = str(request.POST.get('date'))
        meeting_hour = str(request.POST.get('hour'))
        converted_meeting_date = datetime.strptime(request.POST.get('date'), "%Y-%m-%d").date() if meeting_date else None
        converted_meeting_hour = datetime.strptime(request.POST.get('hour'), "%H:%M").time() if meeting_hour else None
        subject = 'Meeting'
        message = f'Hi, {participant_name} ! \nYour meeting date: {meeting_date}, hour: {meeting_hour}'
        from_email = settings.SERVER_EMAIL
        recipient_list = [participant_email]
        send_mail(subject, message, from_email, recipient_list)
        if request.POST.get('email'):
            Meeting.objects.create(
                participant_name = request.POST.get('name'),
                participant_email = request.POST.get('email'),
                meeting_date = converted_meeting_date,
                meeting_hour = converted_meeting_hour,
                is_scheduled = True
            )
    return render(request, 'index.html', context)
python django django-models django-forms django-views
2个回答
0
投票

您需要首先创建MeetingHour实例:


hour = MeetingHour.objects.create(hour = converted_meeting_hour)
Meeting.objects.create(
    participant_name = request.POST.get('name'),
    participant_email = request.POST.get('email'),
    meeting_date = converted_meeting_date,
    meeting_hour = hour,
    is_scheduled = True
)

0
投票

由于meeting_hourForeignKey模型的MeetingHour,因此必须从MeetingHour表中获取一个对象并将其保存到meeting_hour模型的Meeting字段中。

例如:

meeting_hour = MeetingHour.objects.get(hour=converted_meeting_hour)

Meeting.objects.create(..., .., .., meeting_hour=meetings_hour)

[如果从数据库角度考虑,则meeting_hour模型的Meeting字段就是id字段的MeetingHour

© www.soinside.com 2019 - 2024. All rights reserved.