Django中外键的实现

时间:2019-03-31 13:41:06

标签: django django-models django-views

我为我的应用编写了此模型

models.py

from django.db import models
from accounts.models import FrontendUsers
from django.utils import timezone

# Create your models here.
class Jit(models.Model):
    value = models.CharField(max_length = 100, blank = False)
    author = models.ForeignKey(FrontendUsers, on_delete=models.CASCADE)
    date = models.DateField(default=timezone.now() )

在视图中,我定义了一个函数,该函数将使用从用户那里获取的信息填充Jits表。

views.py

def new_post (request):
    if request.method == 'POST':
        value = request.POST.get('value')
        if value != '' and value :
            author_id = int(request.POST['user_id'])



            jit = Jit.objects.create(value = value,author=author_id)

            jit.save()
            return redirect('feed')
        else:
            messages.error(request,'There was some problem writing your jit.')
    return redirect('feed')

错误

  

无法分配“ 15”:“ Jit.author”必须是“ FrontendUsers”实例。

简而言之,我试图将author_id添加到Jit的表中,以便可以连接两个表。

3 个答案:

答案 0 :(得分:1)

您可以像使用它

jit = Jit.objects.create(value = value,author_id=author_id)

答案 1 :(得分:1)

使用以下方法之一,但是第二种方法更好,因为它不会从数据库中获取作者:

author = FrontendUsers.objects.get(id=author_id)
jit = Jit.objects.create(value = value,author=author)

jit = Jit.objects.create(value = value,author_id=author_id)

答案 2 :(得分:-1)

您正在将用户实例转换为ant int。

我认为您应该使用一种表格来实现您想要的。试试这样的东西,对我有用。

def new_post (request):
    if request.method == 'POST':
        if your_form.is_valid():
            value = your_form.cleaned_data["value"]
            if value:
                result = your_form.save(commit=False)
                user = Jit.objects.get(id=value)
                result.author = user
                result.save()