Django - OneToOneField не заполняется в Admin - PullRequest
0 голосов
/ 02 января 2019

Я пытаюсь получить имя текущего пользователя, вошедшего в систему, используя OneToOneField для заполнения в администраторе, когда пользователь отправляет форму.

Имя пользователя должно указываться в столбце user admin.py.

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

Я застрял и понятия не имею, что делаю, поэтому любая помощь с радостью приветствуется.

Может кто-нибудь помочь? Чего мне не хватает?

Спасибо!

enter image description here

Код ниже:

user_profile / модель

from django.db import models
from django.urls import reverse
from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.auth.models import User
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.conf import settings
from users.forms import CustomUserCreationForm, CustomUserChangeForm
from users.models import CustomUser


class Listing (models.Model):
    user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, null=True)
    created =  models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)
    name = models.CharField(max_length=100)
    address = models.CharField(max_length=100)
    zip_code = models.CharField(max_length=100)
    mobile_number = models.CharField(max_length=100)
    cc_number = models.CharField(max_length=100)
    cc_expiration = models.CharField(max_length=100)
    cc_cvv = models.CharField(max_length=100)    

def create_profile(sender, **kwargs):
    if kwargs['created']:
        user_profile = Listing.objects.create(user=kwargs['instance'])

post_save.connect(create_profile, sender=User)

user_profile / admin.py

from django.contrib import admin
from django.contrib.auth import get_user_model
from django.contrib.auth.admin import UserAdmin


from user_profile.forms import HomeForm

from user_profile.models import Listing

# Register models here.
class UserProfileAdmin(admin.ModelAdmin):
    list_display = ['name', 'address', 'zip_code', 'mobile_number', 'created', 'updated', 'user']
    list_filter = ['name', 'zip_code', 'created', 'updated', 'user']

admin.site.register(Listing, UserProfileAdmin)
#admin.site.unregister(Listing)

master_application / settings.py

AUTH_USER_MODEL = 'users.CustomUser'
AUTH_PROFILE_MODULE = 'users.UserProfile'

Пользователи / models.py

from django.contrib.auth.models import AbstractUser, UserManager
from django.contrib.auth.models import User
from django.db import models
from django.urls import reverse

class CustomUserManager(UserManager):

    def get_by_natural_key(self, username):
        case_insensitive_username_field = '{}__iexact'.format(self.model.USERNAME_FIELD)
        return self.get(**{case_insensitive_username_field: username})


class CustomUser(AbstractUser):
    objects = CustomUserManager()`

1 Ответ

0 голосов
/ 02 января 2019

Ваш сигнал сломан;У kwargs никогда не будет ключа user, поэтому профиль никогда не будет создан.Что вы на самом деле хотите сделать, так это проверить, что сигнал вызывается при создании (а не при обновлении), добавьте и создайте экземпляр Листинга:

if kwargs['created']:
        user_profile = Listing.objects.create(user=kwargs['instance'])

Обратите внимание, что параметр AUTH_PROFILE_MODULE не использовалсяв течение многих лет вы должны удалить его.

...