Создайте другую модель объектов в django admin внутри цикла for
Я совершенно новичок в django и ранее был php-кодером, поэтому, пожалуйста, потерпите меня, если я тупой. В моем приложении определены три модели: понимание, вопрос, ответ. Каждое понимание имеет несколько вопросов и ответов, определенных как "встроенные" в модели понимания. Вопросы вводятся непосредственно администратором, но ответы будут добавляться автоматически из понимания. Чего я хочу добиться, так это разделить понимание на предложения и добавить каждое предложение в качестве объекта ответа с помощью внешнего ключа текущего понимания. Я пытаюсь переопределить метод сохранения в модели понимания. Но когда я нажимаю сохранить, это дает ошибку экземпляра
Cannot assign "23L": "Answer.ComprehensionAnswer" must be a "Comprehension" instance.
Как мне назначить / создать и экземпляр здесь? или я придерживаюсь неправильного подхода. Если так, пожалуйста, наведите меня на правильный подход.
Ниже приводится содержание models.py
class Question(models.Model):
QuestionText = models.CharField(max_length=500, verbose_name='Question Text')
QuestionTypeID = models.ManyToManyField(QuestionType, verbose_name='Question Type')
ComprehensionQuestion = models.ForeignKey(Comprehension, verbose_name='comprehension')
QuestionRemarks = models.CharField(max_length=500, verbose_name='remarks', null=True, blank=True)
LastUpdate = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.QuestionText
def was_published_recently(self):
return self.LastUpdate >= timezone.now() - datetime.timedelta(1)
class Answer(models.Model):
AnswerText = models.CharField(max_length=500, verbose_name='Answer Text')
AnswerTypeID = models.ManyToManyField(AnswerType, verbose_name='Answer Type')
ComprehensionAnswer = models.ForeignKey(Comprehension, verbose_name='Comprehension', null=True, blank=True)
AnswerRemarks = models.CharField(max_length=500, verbose_name='Remarks')
LastUpdate = models.DateTimeField(auto_now=True)
def __unicode__(self):
return self.AnswerText
class Comprehension(models.Model):
ComprehensionTitle = models.CharField(max_length=100, verbose_name='Comprehension Title')
ComprehensionsText = models.TextField(verbose_name='Text')
ComprehensionsRemarks = models.CharField(max_length=400, verbose_name='Remarks for this Comprehension', null=True, blank=True)
LastUpdate = models.DateTimeField("Last Updated", auto_now=True)
def __unicode__(self):
return self.ComprehensionTitle
def was_published_recently(self):
return self.LastUpdate >= timezone.now() - datetime.timedelta(1)
def save(self, *args, **kwargs):
#overrides the default save function to split the comprehension paragraph into sentences and adds them as probable answers
AnswerList = self.ComprehensionsText.split("u'\u0964'")
for sentence in AnswerList:
p = Answer.objects.create(AnswerText = sentence, ComprehensionAnswer = self.pk)
super(Comprehension, self).save(*args, **kwargs)
Содержимое внутри admin.py
class ComprehensionAdmin(admin.ModelAdmin):
form = ComprehensionForm
fieldsets = [
('Main', {'fields': ['ComprehensionTitle','ComprehensionsText']}),
('Additional Info', {'fields': ['ComprehensionsRemarks'], 'classes': ['collapse']}),
]
inlines = [QuestionInline, AnswerInline]
list_display = ('ComprehensionTitle', 'LastUpdate')
list_per_page = 10
class QuestionInline(admin.TabularInline):
model = Question
extra = 2
class AnswerInline(admin.TabularInline):
model = Answer
extra = 2
admin.site.register(Question)
admin.site.register(Answer)
admin.site.register(Comprehension, ComprehensionAdmin)
Я также следовал подходу, упомянутому на этой странице. Но, пусто о том, как создавать объекты в состоянии фиксации, используя внешний ключ модели понимания.
1 ответ
Вы должны использовать self
вместо self.pk
и обратите внимание, что self
ссылается на текущий объект.
p = Answer.objects.create(AnswerText = sentence, ComprehensionAnswer = self)
Из следов, это ясно показывает, что ComprehensionAnswer
атрибут Answer
модель ожидает Comprehension
объект модели. Но вы передаете идентификатор этого объекта.