Django: автоматическое сохранение полей внешних ключей
Я пытаюсь автоматически заполнить поле внешнего ключа при отправке формы. Я успешно установил поле пользователя, но у меня проблемы с form.instance.staff
и form.instance.event
, так как я получаю ошибку типа 'User' object has no attribute 'staffduty'
. Я также хотел бы передать и сохранить некоторые переменные, такие как date_appointment
и event name
, но я не знаю, как это сделать.
Спасибо за помощь
models.py
class Event(models.Model):
name = models.CharField(max_length=255)
staff_needed = models.PositiveIntegerField()
date = models.DateField()
def __str__(self):
return self.name
def get_absolute_url(self):
return reverse('event_details', args=[str(self.id)])
class StaffDuty(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
date_work = models.DateField()
shift = models.CharField(max_length=255)
def __str__(self):
return self.event.name | str(self.date_work)
class UserAppointment(models.Model):
user = models.ForeignKey(UserProfile, on_delete=models.CASCADE)
staff = models.ForeignKey(StaffDuty, on_delete=models.CASCADE)
event = models.ForeignKey(Event, on_delete=models.CASCADE)
event_name = models.CharField(max_length=255)
date_appointment = models.DateField(null=True)
def __str__(self):
return self.event.name | str(self.staff.date_work)
def get_absolute_url(self):
return reverse('home')
views.py
class StaffDutyAddView(CreateView):
model = StaffDuty
form_class = StaffDutyForm
template_name = 'reservation.html'
success_url = reverse_lazy('home')
class UserAppointmentAddView(CreateView):
model = UserAppointment
form_class = UserAppointmentForm
template_name = "reservation.html"
def form_valid(self, form):
form.instance.user = self.request.user.userinformation
form.instance.staff = StaffDuty.objects.filter(user=self.request.user.staffduty).first()
#form.instance.date_appointment = # add date_work from StaffDuty class
form.instance.event = Event.objects.filter(user=self.request.user.event).first()
#form.instance.event_name = # add name of the event from Event class
return super(UserAppointmentAddView, self).form_valid(form)
def get_context_data(self, **kwargs):
kwargs['object_list'] = StaffDuty.objects.order_by('id')
return super(UserAppointmentAddView, self).get_context_data(**kwargs)