недопустимый литерал для int () с основанием 10: с Django - PullRequest
0 голосов
/ 24 февраля 2020

Моя модель: я получаю недопустимый литерал для int () с базой 10 в Django, он прекрасно работает в оболочке

class Category(models.Model):
    cat_id = models.IntegerField(primary_key=True)
    category_name = models.CharField(max_length=1000)
    created_at = models.DateField(auto_now=True ,max_length=30)
    def __str__(self):
        return self.category_name


class Content(models.Model):
    content_id = models.AutoField(primary_key=True)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)
    content = models.CharField(max_length=5000)
    created_at = models.DateField(auto_now=True)

    def __str__(self):
        return self.content

** мой взгляд **

def create_blog(request):
    if request.method == 'POST':
        title = request.POST['title']
        content = request.POST['content']
        category = request.POST['category']

        object_of_category = Category.objects.get(cat_id = (category))

        save_post = Content(category = object_of_category, content =content)

        save_post.save()
        return redirect(create_blog,{'message':'Post created Successfully!'})
    categories = Category.objects.all()
    return render(request ,'admin/create_blog.html', {'categories' : categories})

Ответы [ 3 ]

1 голос
/ 24 февраля 2020

Вам не нужно добавлять модели. AutoField () самостоятельно, он добавляется Django автоматически, см. Здесь https://docs.djangoproject.com/en/3.0/topics/db/models/#automatic -primary-key-fields

you необходимо удалить ваши пользовательские идентификаторы в обеих таблицах и изменить запрос get

с

object_of_category = Category.objects.get(cat_id = (category))

на

object_of_category = Category.objects.get(id=category)
0 голосов
/ 24 февраля 2020

Во-первых, вы пытаетесь получить идентификатор (тип Integer) категории значения (тип String) в следующем фрагменте: object_of_category = Category.objects.get(cat_id = (category))

Кроме того, избегайте создания полей первичного ключа, если это не является абсолютно необходимым, например Django делает это для вас автоматически.

Кроме того, блоки Try.. Except чрезвычайно полезны в таких ситуациях, поскольку они генерируют StackTraces, показывающий, откуда происходят ваши ошибки.

0 голосов
/ 24 февраля 2020

Я прочитал ваш код и увидел следующую точку в вашем коде:

category = request.POST['category']

вам следует обратить внимание, что то, что вы публикуете, должно быть типа int

, потому что в вашей модели категории :

cat_id = models.IntegerField(primary_key=True)

целочисленный тип

Я думаю, что весь ваш код в порядке, но до

object_of_category = Category.objects.get(cat_id = (category))

проверьте тип категории с помощью:

type(category)

Я предлагаю использовать django .form для предотвращения этих сложностей.

...