将用户关联到 Django 中的 post

Associate user to a post in Django

大家好,我正在尝试创建一个博客,我想将一个用户关联到 post .. 并发表评论,这是一个多用户博客,我不知道该怎么做,有什么帮助吗? !

这是模型文件:

from django.db import models
from django.utils import timezone
from django.conf import settings
from django.utils.text import slugify

# Create your models here.
#this is for categories 
class Category(models.Model):
    title=models.CharField(max_length=100,default='')
    def __str__(self):
        return self.title
        #this is where a user can create his own gigs 
class Gigposter(models.Model):

    title=models.CharField(default='',max_length=100,blank=False)
    user=models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,null=False)
    categories=models.OneToOneField(Category,on_delete=models.PROTECT,default='',null=False)
    published_at=models.DateTimeField(auto_now_add=True)
    description=models.TextField(default='',max_length=None,blank=False)
    mainphoto=models.ImageField(default='')
    photo=models.ImageField()
    def __str__(self):
        return self.title

#this is where a user can comment and say what he thinks about others work
class Comment_area(models.Model):

    user=models.OneToOneField(settings.AUTH_USER_MODEL,on_delete=models.CASCADE,blank=False)
    comment=models.TextField(max_length=None,default='')
    commented_at=models.DateTimeField(auto_now_add=True)

如您所见,视图文件是空的:

from django.shortcuts import render

# Create your views here.

不建议在此处使用 OneToOneField,因为它告诉 Django 用户恰好绑定到一个 comment/post(此时,用户可能 post 不止一次)。

您可以使用 models.ForeignKey:

from django.contrib.auth.models import User

class Gigposter(models.Model):
   # Other properties...
   user = models.ForeignKey(
                    'User'
                     on_delete=models.CASCADE
                 )

如果您想在管理页面上工作时自动将用户关联到 post,您应该重新定义模型的 save_model 方法。此方法描述了保存模型时应执行的所有操作。在您的情况下,您应该添加类似

的内容
class GigposterAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
    obj.user = `request.user`
    super().save_model(request, obj, form, change)

admin.site.register(Gigposter, GigposterAdmin)

给你的admin.py。您还应该从 GigposterAdmin 的字段集中排除用户字段。参见 this for reference

如果您需要在您的视图中识别用户,您可以随时使用 request.user。特别是,您可以将其作为 context 的一部分传递以生成视图。希望这有帮助。