Я совершенно новичок в django и раньше был php-кодером, поэтому, пожалуйста, несите меня, если я тупой. У меня есть три модели, определенные в моем приложении, Понимание, Вопрос, Ответ. Каждое понимание имеет несколько вопросов и ответов, определенных как «inline» в модели «Понимание». Вопросы вводятся непосредственно администратором, но ответы автоматически добавляются из понимания. То, что я хочу достичь, состоит в том, чтобы разделить понимание на предложения и добавить каждое предложение в качестве объекта ответа с помощью foreignkey текущего понимания. Я пытаюсь переопределить метод save в модели Comprehension. Но когда я нажимаю «Сохранить», он дает ошибку экземпляраСоздайте еще один объект модели в django admin внутри цикла for
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)
Я также следовал подход, упомянутые на этом page. Но, пустое о том, как создать объекты в состоянии фиксации, используя внешний ключ модели Comprehension.
Вау, ты спас мой день @ Авинаш Радж. С утра я перетасовал разные подходы, теперь результаты. Большое спасибо –
Рад, что это сработало :-) –
Будучи php-кодером ранее, я предположил, что я должен предоставить первичный ключ для хранения в внешнем ключе. Хорошо, что django дает такой мощный функциональный способ получить идентификатор от объекта напрямую. Еще раз спасибо. –