Модель Джанго и проблема с разрешением автора блога - PullRequest
1 голос
/ 10 марта 2019

Я пытаюсь создать блог Django, и проблема в том, что при регистрации нового пользователя он не появляется в разделе добавления блога, пока не будет добавлен в блог как автор блога.

Вот моя модель:

from django.db import models
from django.contrib.auth.models import User

class Author(models.Model):
    name = models.ForeignKey(User, on_delete=models.CASCADE)
    profile_picture = models.FileField()
    detail = models.TextField()

    def __str__(self):
        return self.name.username

class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name

class Article(models.Model):
    author = models.ForeignKey(Author, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    body = models.TextField()
    image = models.FileField()
    posted_on = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True, auto_now_add=False)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)


    def __str__(self):
        return self.title

Я показываю здесь моего администратора:

enter image description here

а это моя форма публикации статьи:

enter image description here

Мне нужно, когда пользователь, зарегистрированный и вошедший в реестр, появляется только в разделе имени (3-й снимок экрана)

Даже проблема заключается в том, что в разделе имени он просит меня зарегистрировать пользователя в качестве имени автора блога, но мне это не нужно. Мне нужно, чтобы все зарегистрированные пользователи заходили в раздел имени статьи, и только они могут публиковать сообщения, если они вошли в систему

enter image description here

1 Ответ

0 голосов
/ 11 марта 2019

Проблема в том, что когда люди регистрируются, они создают новый User, , а не новый Author.Лучший способ обойти это - сделать Author расширение из User через OneToOneField.Для простоты давайте переименуем Author в UserProfile и автоматически сгенерируем UserProfile для User при каждом обращении к профилю.Это означает, что вы можете написать user.userprofile, чтобы получить всю дополнительную информацию о пользователе.

Вот пример:

class UserProfile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='userprofileAsUser')  # TODO: Use models.PROTECT... can't currently bc User.userprofile generates it again when trying to delete User
    profile_picture = models.FileField()
    detail = models.TextField()

    def __str__(self):
        return self.name.username

def get_or_create_profile(user):
    profile, created = UserProfile.objects.get_or_create(user=user)
    return profile

User.userprofile = property(get_or_create_profile)


class Category(models.Model):
    name = models.CharField(max_length=100)

    def __str__(self):
        return self.name


class Article(models.Model):
    author = models.ForeignKey(User, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    body = models.TextField()
    image = models.FileField()
    posted_on = models.DateTimeField(auto_now=False, auto_now_add=True)
    updated_on = models.DateTimeField(auto_now=True, auto_now_add=False)
    category = models.ForeignKey(Category, on_delete=models.CASCADE)


    def __str__(self):
        return self.title
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...