将用户与 Django 中的帖子关联

问题描述 投票:0回答:3

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

这是模型文件:

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.
django django-models django-views django-users
3个回答
2
投票

不建议在这里使用 OneToOneField,因为它告诉 Django 用户只绑定到一个评论/帖子(当用户可能多次发布时)。

你可以使用

models.ForeignKey
:

from django.contrib.auth.models import User

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

1
投票

如果您想在管理页面上工作时自动将用户与帖子关联,您应该重新定义模型的

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 的字段集中排除用户字段。请参阅作为参考

如果您需要在视图中识别用户,您可以随时使用

request.user
。特别是,您可以将其作为
context
的一部分传递以生成视图。希望这有帮助。


0
投票

从 django.contrib.auth.models 导入用户

类帖子(模型.模型): 作者 = models.ForeignKey(User, on_delete=models.CASCADE)

© www.soinside.com 2019 - 2024. All rights reserved.