1

right now I'm working with a blogging system which I am making without using an admin site of django. So, I have to create a blog post models and views functions that store the blog data to database manually.In that I have used User login with custom user models and a foreign key for store logged user's first name in BlogData database from User model.

My problem is that I cant directly connect to user's first name by views.Is there any way to do it.

Here is my code,

Models.py (BlogData)

from django.db import models
from login.models import User

# Create your models here.


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)

    def __str__(self):
        return self.blog_title

Views.py

from django.shortcuts import render
from .models import languages,BlogData

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



 #Problem is what to write in blogger_name

        data = BlogData.objects.create(blogger_name = <?????>,blog_title=blg_tt,blog_subtitle=blg_stt,blog_body=blg_cnt,blog_baseimg=blg_img)
        data.save()

        return render(request,"index.html")

Models.py (Custom User Model)

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

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = []

    objects = UserManager()
     

1 Answer 1

1

you can directly do that using 'request.user.username'

data = BlogData.objects.create(blogger_name = request.user,blog_title=blg_tt,blog_subtitle=blg_stt,blog_body=blg_cnt,blog_baseimg=blg_img)
 
Sign up to request clarification or add additional context in comments.

2 Comments

I had tried that method but it is showing me an error like Cannot assign "'some string value'": "BlogData.blogger_name" must be a "User" instance.Also, I had assigned username to None so, the database will store that value as null
yeah its because in banner_name you have to put user object so you dont need username you need user object answer is updated

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.