【问题标题】:Associate user to a post in Django将用户关联到 Django 中的帖子
【发布时间】:2020-06-04 00:58:16
【问题描述】:

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

这是模型文件:

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.

【问题讨论】:

  • 那么您的问题到底出在哪里?正如我在你之前的问题中提到的,不要在这里使用 OneToOneFields !这意味着一个用户与一个评论或帖子相关联。对用户使用外键,你应该没问题。
  • @errorinpersona 非常感谢您回答我,所以我的问题是当我进入管理面板时,由我来选择我想要的用户,我希望自动选择用户.. 例如,您的评论与您的​​姓名相关联
  • 嗯好吧 - 那么看看@Ivan K. 的回答吧

标签: django django-models django-views django-users


【解决方案1】:

不建议在此处使用 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
                 )

【讨论】:

  • 感谢您的回答,我现在就改,但即使我改了,问题也没有解决,我希望用户自动关联到我的模型
【解决方案2】:

如果您想在管理页面上自动将用户关联到帖子,您应该重新定义模型的 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 的一部分传递以生成视图。希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 2021-12-23
    • 1970-01-01
    • 2016-04-14
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多