Я пытаюсь применить базовое c наследование модели на основе Django документации. Конечная цель - получить доступ к общему идентификатору моделей Exam и Date в представлении get_date_info, которое вызывается после представления get_exam_info. Возможно, есть лучший способ сделать это, чем наследование модели, но мне это показалось наиболее простым.
Вот соответствующий код модели:
class Exam(models.Model):
instructor_first_name = models.CharField(max_length=30)
instructor_last_name = models.CharField(max_length=30)
department = models.CharField(max_length=30, null=True)
course_name = models.CharField(max_length=30, null=True)
course_number = models.IntegerField(null=True)
section_number = models.IntegerField(null=True)
num_students = models.IntegerField(null=True)
calculator = models.CharField(max_length=30, blank=True)
notes = models.CharField(max_length=30, blank=True)
computer_exam = models.BooleanField(default=False)
scantron = models.BooleanField(default=False)
timed = models.BooleanField(default=False)
dictionary = models.BooleanField(default=False)
comment = models.CharField(max_length=300, blank=True)
class Date(Exam):
start_date = models.DateField()
end_date = models.DateField()
late_start_date = models.DateField(blank=True, null=True)
late_end_date = models.DateField(blank=True, null=True)
Вот соответствующий код представления:
def get_exam_info(request):
if request.method == 'POST':
exam_form = ExamForm(request.POST)
if exam_form.is_valid():
exam_form.save()
date_form = DateForm()
return render(request, 'date_info.html', {'date_form': date_form})
else:
exam_form = ExamForm()
return render(request, 'exam_info.html', {'exam_form': exam_form})
def get_date_info(request):
exam_request = Exam.objects.all()
if request.method == 'POST':
date_instance = Date()
date_form = DateForm(request.POST, instance=date_instance)
if date_form.is_valid():
date_form.save()
current_user_id = date_instance.exam_ptr_id
print(current_user_id)
return HttpResponseRedirect('/')
else:
date_form = DateForm()
return render(request, 'date_info.html', {'date_form': date_form})
Вот результат в базе данных: Это это таблица экзамена
И это таблица дат
Некоторые другие вещи, которые я пробовал: я создал абстрактную модель, которая содержит общий идентификатор, затем я сделал классы Exam и Date подклассами этого абстрактного суперкласса. Это дало ожидаемое поведение в базе данных, но тогда экземпляры экзаменов не были доступны в представлениях. Я также попробовал множество комбинаций создания OneToOneFields, чтобы связать модели экзамена и даты, но ни одна из них не дала желаемого поведения.
Я пытался выяснить, почему это происходит в течение довольно долгого времени. Любая помощь будет оценена!