Нужна помощь, ассоциировать пользователя с постом - PullRequest
1 голос
/ 19 февраля 2020

Привет всем, я пытаюсь создать блог, и я хочу, чтобы пользователь связался с тем, чтобы публиковать и комментировать, это многопользовательский блог, и я не знаю, как это сделать, помогите, ребята? !

вот файл модели:

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.

Ответы [ 2 ]

2 голосов
/ 19 февраля 2020

Не рекомендовал бы использовать 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 голос
/ 20 февраля 2020

Если вы хотите автоматически связать пользователя с сообщением при работе на странице администратора, вам следует переопределить 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 для генерации представления. Надеюсь, это поможет.

...