您好,匿名用户

为什么无法获取Django模型主键的值?

0 投票

下面是定义模型的代码

class Post(models.Model):
    id = models.IntegerField(primary_key=True)
    body = models.CharField(max_length=50000)
    timestamp = models.DateTimeField(auto_now=True)
    author_id = models.ForeignKey(settings.AUTH_USER_MODEL, default=None)

    def get_absolute_url(self):
        return reverse('display_post', args=[self.id])

下面是视图函数

@login_required
def new_post(request):
    form = PostForm()
    if request.method == 'POST':
        form = PostForm(data=request.POST)
        if form.is_valid():
            post = form.save(request.user)
            print(post.id)
            print(post.body)
            print(post.timestamp)
            print(post.author_id)
            # return redirect(post)
    return render(request, 'post.html', {'form': form})

这是数据库中的一条记录
15|hello world|2016-12-25 01:59:33.898952|zhou@zhou.com
15就是主键的值,除了print(post.id)为None外,其他都有值。
有谁知道为什么只有post.idNone,但又可以获取其他属性的值得原因吗?

PostForm代码

class PostForm(forms.ModelForm):

    class Meta:
        model = Post
        fields = ('body',)

    def save(self, user_id):
        self.instance.author_id = user_id
        return super().save()
用户头像 提问 2017年 6月1日 @ 匿名用户
分享到:

1个回答

0 投票

有一个信息不详细没给出,就是 PostForm 你是如何定义的。

如果你这么定义PostForm,通过调用PostForm(request.POST).save()是可以得到你想要的结果的。

class PostForm(forms.ModelForm):

    class Meta:
        model = Post
        

不过你的PostForm肯定不是这么定义的,因为post = form.save(request.user)是错误的使用方法,ModelFormsave方法只有一个参数,就是commit = False 或者 commit=True,表示是否将数据保存到数据库,默认True.

源码见链接

用户头像 回复 2017年 6月1日 @ Virgo 下士 (894 威望)
提一个问题:

相关问题

0 投票
1 回复 102 阅读
用户头像 提问 2015年 9月18日 @ Akali 下士 (892 威望)
0 投票
1 回复 96 阅读
用户头像 提问 2012年 12月1日 @ Volibear 中士 (1,029 威望)
0 投票
1 回复 224 阅读
用户头像 提问 2014年 2月17日 @ Scorpio 中士 (1,060 威望)
0 投票
1 回复 80 阅读
0 投票
1 回复 48 阅读

欢迎来到随意问技术百科, 这是一个面向专业开发者的IT问答网站,提供途径助开发者查找IT技术方案,解决程序bug和网站运维难题等。
温馨提示:本网站禁止用户发布与IT技术无关的、粗浅的、毫无意义的或者违法国家法规的等不合理内容,谢谢支持。

欢迎访问随意问技术百科,为了给您提供更好的服务,请及时反馈您的意见。
...