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