ValueError в / / В поле id ожидалось число, но получено 'в django - PullRequest
0 голосов
/ 01 августа 2020

прямо сейчас я работаю над приложением для блога, которое создано без использования сайта администратора django, и я добавил к нему функцию публикации в блоге. Я использовал два внешних ключа для одной модели User, которая настраивается с помощью Custom Модель пользователя.

Теперь проблема в том, что я не могу назначить два слага в URL-адресе подряд. Я прикрепил код представлений и URL-адресов для лучшего понимания.

Я пытался удалите все миграции и повторно перенесите все, но у меня это не сработало. Есть ли решение этой проблемы.

Вот мой код

views.py

from django.shortcuts import render,redirect
from .models import languages,BlogData
from django.conf import settings
from login.models import BaseUserManager,AbstractUser,User
from login.views import register_user
from django.shortcuts import get_object_or_404
from django.utils.text import slugify

# Create your views here.
def index(request):
    blogs = BlogData.objects.order_by('-publish_date')
    return render(request,"index.html",{'languages':languages, 'blogs':blogs})

def login(request):
    return render(request,"login.html")

def about(request,user_slug):
    return render(request,"about.html")

def sample(request):
    return  render(request, "sample.html")

def register(request):
    return render(request,"register.html")

"""-------------The main function below from which I am getting error---------"""

def blog_details(request,user_slug,blog_slug):
    blog = get_object_or_404(BlogData,user_slug = user_slug,blog_slug = blog_slug)
    return render(request,"sample.html",{'blog':blog})

def post(request):
    return render(request,"contact.html")

def submit_post(request):
    if request.method == 'POST':
        blg_tt = request.POST['blog_title']
        blg_stt = request.POST['blog_subtitle']
        blg_cnt = request.POST['blog_content']
        blg_img = request.POST['blog_img']
        blg_slg = slugify(blg_tt)

        print(User.user_slug)

        data = BlogData.objects.create(blogger_name=request.user,blog_title=blg_tt,blog_subtitle=blg_stt,blog_body=blg_cnt,blog_baseimg=blg_img,blog_slug=blg_slg,user_slug=request.user)
        data.save()

        return redirect("index")

urls.py

from django.urls import path,include
from . import views

urlpatterns = [
    path("",views.index, name = "index"),
    path("login/",views.login, name = "login"),
    path("about",views.about,name = "about"),
    path("sample",views.sample, name = "sample"),
    path("register",views.register,name = "register"),
    path("contact",views.post,name = "post"),
    path("post_blog",views.submit_post,name = "post_blog"),
    path("<slug:user_slug>/",views.about,name = "about"),

    # Here's the path below from I want to call the view function 

    path("<slug:user_slug>/<slug:blog_slug>/",views.blog_details,name = "blog_details"),
]

models.py

from django.db import models
from django.conf import settings
from django.urls import reverse
from login.models import User
from django.utils.text import slugify

# Create your models here.
languages = ['eng','fra','spa','hin']

class BlogData(models.Model):
    blogger_name = models.ForeignKey(User,on_delete=models.CASCADE,related_name='blogger_name')
    publish_date = models.DateTimeField(auto_now=True)
    blog_title = models.TextField()
    blog_subtitle = models.TextField()
    blog_body = models.TextField()
    blog_baseimg = models.ImageField(upload_to='pics',null=True)
    blog_slug = models.SlugField(max_length=200,db_index=True,unique=False)
    user_slug = models.ForeignKey(User,on_delete=models.CASCADE,related_name='users_slug')

    def get_absolute_url(self):
       
        #Here I had given the views function args

        return reverse('blog_details',args=[self.user_slug.user_slug,self.blog_slug])

    def __str__(self):
        return self.blog_title

models.py (настраиваемая модель пользователя)

from django.db import models
from django.contrib.auth.models import AbstractUser,BaseUserManager

# Create your models here.
class UserManager(BaseUserManager):
    use_in_migrations = True
    def _create_user(self,email,password,**kwargs):
        email = self.normalize_email(email=email)
        user = self.model(email=email,**kwargs)
        user.set_password(password)
        user.save(using = self._db)
        return user

    def create_user(self,email,password = None,**kwargs):
        kwargs.setdefault('is_staff',False)
        kwargs.setdefault('is_superuser',False)
        return self._create_user(email,password,**kwargs)

class User(AbstractUser):

    username = None
    email = models.EmailField(unique = True)
    user_slug = models.SlugField(max_length=200,unique=False)

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()

1 Ответ

0 голосов
/ 01 августа 2020

попробуйте это:

def blog_details(request,user_slug,blog_slug):
    blog = get_object_or_404(BlogData, user_slug__user_slug=user_slug, blog_slug=blog_slug)
    return render(request,"sample.html",{'blog':blog})
...