Как получить доступ к данным пользователя, когда я использую исходную модель пользователя в качестве внешнего ключа в Django - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть модель книги, как показано ниже:

from django.db import models
from django.db.models.signals import pre_save
from django.utils.text import slugify
from django.conf import settings


class Book(models.Model):
    added_by = models.ForeignKey(
        settings.AUTH_USER_MODEL, null=True, blank=True, related_name='book_add', on_delete=models.CASCADE),
    last_edited_by = models.ForeignKey(
        settings.AUTH_USER_MODEL, null=True, blank=True, related_name='book_edit', on_delete=models.CASCADE)
    title = models.CharField(max_length=120)
    description = models.TextField(null=True, blank=True)
    slug = models.SlugField()
    updated = models.DateTimeField(auto_now_add=False, auto_now=True)
    timestamp = models.DateTimeField(auto_now_add=True, auto_now=False)

    @property
    def user_id(self):
        return self.added_by.id

    def __str__(self):
        return self.title


def pre_save_book(sender, instance, *args, **kwargs):
    slug = slugify(instance.title)
    instance.slug = slug


pre_save.connect(pre_save_book, sender=Book)

Теперь в моем файле admin.py я пытаюсь сделать это:

from django.contrib import admin
from .models import Book
from .forms import BookForm


class BookAdmin(admin.ModelAdmin):
    fields = [
        'title',
        'slug',
        'added_by'
    ]

    read_only_fields = [
        'updated'
        'timestamp',
        'added_by',
        'last_edited_by'
    ]


admin.site.register(Book, BookAdmin)

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

Итак, я попытался перейти к консоли и попробовать:

(Django-concepts) ~/Desktop/Studies/Codes/Django-concepts/django_cls_views:$ python manage.py shell
Python 3.7.3 (default, Mar 27 2019, 09:23:15) 
[Clang 10.0.1 (clang-1001.0.46.3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from demo.models import Book
>>> for obj in Book.objects.all():
...     print(obj.added_by[0].username)
... 
Traceback (most recent call last):
  File "<console>", line 2, in <module>
AttributeError: 'ForeignKey' object has no attribute 'username'
>>> 

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

Ответы [ 2 ]

2 голосов
/ 04 ноября 2019

У вас есть опечатка в определении вашей модели;дополнительный , после поля added_by. Это превратило определение в кортеж;ваши миграции фактически не добавят туда столбец. Удалите запятую, запустите makemigrations и снова мигрируйте.

0 голосов
/ 04 ноября 2019
print(obj.added_by.username)

Это должно работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...