Django 模型不通过外键关系使用另一个模型



我正在尝试创建一个网络应用程序,该应用程序将允许预订跑步俱乐部的培训课程。

我有我的用户应用程序和一个training_sessions应用程序,教练可以在其中发布课程。它们包括地点、日期、参加课程的教练以及有关课程内容的一些细节。我现在想添加一个功能,登录用户可以在其中单击会话并让他们预订到该会话上。

我有一个俱乐部会话模型:

class ClubSession(models.Model):
location = models.CharField(max_length=200)
coach = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
date = models.DateTimeField(default=now)
details = models.TextField()
def __str__(self):
return self.location
def get_absolute_url(self):
return reverse('session_detail', args=[str(self.id)])

在多个视图中使用它来创建、编辑、删除、查看和列出所有会话:

class SessionListView(ListView):
model = ClubSession
template_name = 'club_sessions.html'
context_object_name = 'all_club_sessions_list'

class SessionDetailView(DetailView):
model = ClubSession
template_name = 'session_detail.html'
context_object_name = 'club_session'

class SessionCreateView(CreateView):
model = ClubSession
template_name = 'session_new.html'
fields = ['location', 'coach', 'date', 'details']

class SessionUpdateView(UpdateView):
model = ClubSession
template_name = 'session_edit.html'
fields = ['location', 'coach', 'date', 'details']

class SessionDeleteView(DeleteView):
model = ClubSession
template_name = 'session_delete.html'
success_url = reverse_lazy('home')

我现在正在尝试为我的用户和 ClubSessions 模型创建一个带有外键的预订模型。这就是我得到的:

class ClubSessionBookings(models.Model):
athlete = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
club_sessions = models.ForeignKey(ClubSession, on_delete=models.CASCADE)
def __str__(self):
return self.athlete
def get_absolute_url(self):
return reverse('booking_session_detail', args=[str(self.id)])

我添加了这个视图:

class SessionBookingCreateView(CreateView):
model = ClubSessionBookings
template_name = 'session_booking_new.html'
fields = ['athlete', 'location', 'coach', 'date', 'details']
context_object_name = 'session_booking_new'

和这个网址:

path('club_sessions_booking/', SessionBookingCreateView.as_view(), name='session_booking_new')

但我看到这个例外:Unknown field(s) (coach, date, location, details) specified for ClubSessionBookings.我想我的ClubSessionBookings模型如何使用ClubSession作为外键存在问题。我做错了什么,我该如何解决?

您的俱乐部会话预订模型只有两个字段:athleteclub_sessions。因此,您在SessionBookingCreateView中指定了错误的字段集。

如果您只使用这两个正确的字段,它应该可以工作。

但在这种情况下,我们希望在sessionDetailView下方放置一个按钮,例如"注册此会话"。当登录用户单击时,将自动创建模型。为此,您可能从按钮单击URL收集会话ID,并从会话中登录用户。然后动态创建模型,而不是使用窗体。

最新更新