Реализация внешних ключей в Django - PullRequest
0 голосов
/ 31 марта 2019

Я написал эту модель для своего приложения

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')

Error

Невозможно назначить «15»: «Jit.author» должен быть экземпляром «FrontendUsers».

Проще говоря, я пытаюсь добавить author_id в таблицу Jit, чтобы обе таблицы можно было соединить.

Ответы [ 3 ]

1 голос
/ 31 марта 2019

Используйте один из этих способов, но второй лучше, поскольку он не выбирает автора из базы данных:

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)
1 голос
/ 31 марта 2019

Вы можете использовать его как

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

0 голосов
/ 31 марта 2019

Вы конвертируете пользователя instace в 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()
...