【问题标题】:Store first name of user using foreign key on User model django在用户模型django上使用外键存储用户的名字
【发布时间】:2020-07-28 16:10:11
【问题描述】:

现在我正在使用我正在制作的博客系统,而无需使用 django 管理站点。因此,我必须创建一个博客文章模型和视图函数,将博客数据手动存储到数据库中。因为我已经使用了自定义用户模型的用户登录和一个外键,用于在 BlogData 数据库中存储登录用户的名字来自 @ 987654322@型号。

我的问题是我无法通过视图直接连接到用户的名字。有什么办法吗?

这是我的代码,

Models.py(博客数据)

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(自定义用户模型)

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

【问题讨论】:

    标签: python django django-models django-views


    【解决方案1】:

    您可以使用 '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)
     
    

    【讨论】:

    • 我曾尝试过该方法,但它向我显示了一个错误,例如 Cannot assign "'some string value'": "BlogData.blogger_name" must be a "User" instance.Also,我已将用户名分配给 None,因此,数据库将该值存储为 null
    • 是的,因为在banner_name中你必须放置用户对象所以你不需要用户名你需要用户对象答案更新
    猜你喜欢
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-07
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    相关资源
    最近更新 更多