Django模型的CreateOrUpdateView
在我的模型中,我有这样的外键关系:Django模型的CreateOrUpdateView,django,django-views,Django,Django Views,在我的模型中,我有这样的外键关系: class Question(models.Model): question = models.TextField(null=False) class Answer(models.Model): question = models.ForeignKey(Question, related_name='answer')
class Question(models.Model):
question = models.TextField(null=False)
class Answer(models.Model):
question = models.ForeignKey(Question, related_name='answer')
user = models.ForeignKey(User)
class Meta:
unique_together = (("question", "user"),)
url(r'^a/(?P<pk>\d+)/$', AnswerQuestion.as_view(), name='answer-question'),
提交答案的相应URL包含问题的id,如下所示:
class Question(models.Model):
question = models.TextField(null=False)
class Answer(models.Model):
question = models.ForeignKey(Question, related_name='answer')
user = models.ForeignKey(User)
class Meta:
unique_together = (("question", "user"),)
url(r'^a/(?P<pk>\d+)/$', AnswerQuestion.as_view(), name='answer-question'),
并添加初始值,但由于pk,这并不干净。使用UpdateView
我会遇到问题,因为我必须为表单设置默认值
有人做过这样的事吗?我宁愿避免为同一个答案创建和更新视图。更新视图和创建视图实际上没有那么大的不同,唯一的区别是更新视图将对象设置为对象 最简单的方法是子类化
UpdateView
并重写get\u object()
:
如果存在,则返回正确答案;如果不存在,则返回
None
。当然,可以在类中添加所需的任何属性,如model
、form\u class
等。谢谢,这似乎很有效。阅读文档时,我的印象是“get_object”与“CreateView”无关,除了:question=super(AnswerQuestionView,self)。get_object(question.objects.all())不起作用,因为我希望创建/更新answer对象这就是为什么要子类化UpdateView
,因为它确实使用了获取对象
。您需要url中指定ID的问题来更新正确答案或创建新答案。调用super
并查询一组问题只是一个小技巧,可以轻松获得正确的问题。在get
和post
方法中调用的get\u object
方法返回的实际对象是一个答案,如果它不存在,None
。