'__proxy__'对象在CreateView中没有属性'get'

rat*_*123 0 python django django-views

所以我认为这不是做事情的正确方法,但是我正在尝试学习Django,并且正在尝试一些事情。我试图Formula通过在的实例中进行硬编码来为模型设置外键maker

楷模:

class Cooker(models.Model):
    name = models.CharField(max_length=20, name="name")
    background = models.CharField(max_length=500, name="background")


class Formula(models.Model):
    food = models.CharField(max_length=200, name="food")
    maker = models.ForeignKey(Cooker, related_name="cooker_key")
Run Code Online (Sandbox Code Playgroud)

观看次数

class CookerCreate(CreateView):
    template_name = "cookercreate.html"
    model = Cooker
    fields = ['name','background']
    success_url = reverse_lazy('cooker')

class FormulaCreate(CreateView):
    template_name = "formulahome.html"
    model = Formula
    fields = ['food']
    success_url = reverse_lazy('formulahome')

    def form_valid(self, form):
        self.object = form.save(commit = False)
        self.object.maker = Cooker.objects.get(pk=1)
        form.save()
        return reverse_lazy('formula home')
Run Code Online (Sandbox Code Playgroud)

FormulaCreate我要设置的类中self.object.maker,我只想对Cooker已经创建的a进行硬编码。谢谢

编辑:当我尝试提交表单时,我FormulaCreate(CreateView)得到了错误Exception Value: '__proxy__' object has no attribute 'get'

sol*_*oke 5

错误的原因是form_valid应该返回一个Response对象,并且您正在返回一个URL。

而不是手动执行此操作,您应该只调用父方法,该方法将重定向到success_url您已经定义的:

def form_valid(self, form):
    self.object = form.save(commit = False)
    self.object.maker = Cooker.objects.get(pk=1)
    form.save()
    return super(FormulaCreate, self).form_valid(form)
Run Code Online (Sandbox Code Playgroud)