将用户关联到 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
的一部分传递以生成视图。希望这有帮助。
大家好,我正在尝试创建一个博客,我想将一个用户关联到 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
的一部分传递以生成视图。希望这有帮助。