简体   繁体   English

无法使用Django保存模型实例

[英]Unable to save model instance with django

I am attempting to save simple data based on a button submission. 我试图基于按钮提交来保存简单数据。 But i keep getting following error: 但我不断收到以下错误:

TypeError at /exercise/1/
save() got an unexpected keyword argument 'commit'

models.py: models.py:

class StrategyHistory(models.Model):
    user = models.ForeignKey(User)
    strategy = models.ForeignKey(Strategies)

    created = models.DateTimeField(editable=False)
    modified = models.DateTimeField()

    def save(self, *args, **kwargs):
        ''' On save, update timestamps '''
        if not self.id:
            self.created = datetime.datetime.today()
        self.modified = datetime.datetime.today()
        return super(StrategyHistory, self).save(*args, **kwargs)

    def __unicode__(self):
        return self.strategy.name

views.py: views.py:

def exercise_view(request, pk):
    template_name = 'mobileApp/page/exercise.html'
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('mobile_user_login'))

    strategy = Strategies.objects.get(pk=pk)

    context = {
        'strategy':strategy,
    }

    if request.method == 'POST':
        strategyhistory = StrategyHistory()
        entry = strategyhistory.save(commit=False)
        entry.user = self.request.user
        entry.strategy = Strategies.objects.get(id=pk)
        entry.save()
        if pk < 5:
            return HttpResponseRedirect(reverse('mobile_exercise', kwargs={'pk':pk+1}))
        else:
            return HttpResponseRedirect(reverse('mobile_comeback_later'))

    return render_to_response(template_name,
    context,
    context_instance = RC( request, {} ))

html-file: HTML文件:

        <form action="" method="post">{% csrf_token  %}
            <a href="#" data-role="button" data-inline="true" data-rel="back" data-transition="flow" data-icon="refresh" data-theme="c">Prøv igen</a>
            <button type="submit" value="submit" data-inline="true" data-transition="flow" data-icon="check" data-theme="b">Fortsæt</button>
        </form>

I am running Django 1.6.2 我正在运行Django 1.6.2

Your view use StrategyHistory model incorrect. 您的视图使用StrategyHistory模型不正确。 That is the use of forms. 那就是表格的使用。 This is correct. 这是对的。

def exercise_view(request, pk):
    template_name = 'mobileApp/page/exercise.html'
    if not request.user.is_authenticated():
        return HttpResponseRedirect(reverse('mobile_user_login'))

    strategy = Strategies.objects.get(pk=pk)

    context = {
        'strategy':strategy,
    }

    if request.method == 'POST':
        strategyhistory = StrategyHistory.objects.create(
            user=request.user,
            strategy=strategy)
        if pk < 5:
            return HttpResponseRedirect(reverse('mobile_exercise', kwargs={'pk': pk + 1}))
        else:
            return HttpResponseRedirect(reverse('mobile_comeback_later'))

    return render_to_response(template_name,
                              context,
                              context_instance = RC( request, {} ))

Also you cannot use self.request in that view. 同样,您不能在该视图中使用self.request There is no self declared. 没有自我声明。

May be this is what you want: 可能这就是您想要的:

class StrategyHistory(models.Model):
    user = models.ForeignKey(User)
    strategy = models.ForeignKey(Strategies)

    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)


    def __unicode__(self):
        return self.strategy.name

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM