簡體   English   中英

Django Admin創建表單內聯OneToOne

[英]Django Admin Create Form Inline OneToOne

我有以下型號:

from django.db import models


class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    last_password_reset = models.DateTimeField(auto_now_add=True)
    needs_password_reset = models.BooleanField(default=True)
    image_url = models.URLField(max_length=500, default=None, null=True, blank=True)

我試圖將此內聯到管理員。 我有以下內容:

from django import forms
from django.contrib.auth.models import User
from django.contrib.auth.admin import UserAdmin
from django.contrib.auth.forms import UserCreationForm

class UserProfileInline(admin.StackedInline):
    """User profile inline."""

    model = Profile
    can_delete = False
    verbose_name_plural = "Profile"


class CustomUserCreationForm(UserCreationForm):
    """Create user form."""

    class Meta:
        model = User
        fields = ("username", "first_name", "last_name", "email")


class CustomUserAdmin(UserAdmin):
    """Custom user admin."""

    add_form = CustomUserCreationForm
    inlines = (UserProfileInline,)


admin.site.unregister(User)
admin.site.register(User, CustomUserAdmin)

這一點工作正常到一定程度; 當我去創建用戶時,我可以看到內聯的個人資料信息。 但是,當我嘗試提交表單時,我收到以下錯誤(在/admin/auth/user/add/ ):

psycopg2.errors.NotNullViolation: null value in column "user_id" violates not-null constraint

為什么user_id字段沒有填入內聯表單? 如何將此屬性設置為表單創建的用戶的id

結果我需要刪除我為自動配置文件創建而寫的一些信號:

# Create a profile for new users
@receiver(post_save, sender=settings.AUTH_USER_MODEL)
def create_user_profile(sender, instance=None, created=False, **kwargs):
    if created:
        Profile.objects.get_or_create(user=instance)


# Update profile on user change
@receiver(post_save, sender=User)
def save_user_profile(sender, instance=None, created=False, **kwargs):
    instance.profile.save()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM