簡體   English   中英

Django UserCreationForm添加request.user.pk嗎?

[英]Django UserCreationForm add request.user.pk ?

嗨,我需要添加請求用戶pk到UserCreationForm。 我嘗試了很多次,但是沒有結果。 在我的儀表板上,我有用戶所有者,而我有用戶賣方。 所有3種類型用戶的一種型號。 因此,所有者可以使用role = seller創建另一個用戶,但是為此,我需要將具有param = request.user.pk的父字段添加到賣方

自定義用戶模型

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


USER = 0
OWNER = 1
SELLER = 2
user_type_choice = (
    (USER, 'User'),
    (OWNER, 'Owner'),
    (SELLER, 'Seller'),
)


class User(AbstractUser):
    role = models.CharField(max_length=100, choices=user_type_choice, default=USER)
    idn = models.CharField(max_length=10, blank=True, default=None, null=True)
    mobile = models.CharField(max_length=15, blank=True, default=None, null=True)
    parent = models.ForeignKey('self', null=True, blank=True)
    tariff = models.IntegerField(default=None, null=True, blank=True)

    class Meta(AbstractUser.Meta):
        swappable = 'AUTH_USER_MODEL'

表格

class SellerRegisterForm(UserCreationForm):

email = forms.EmailField(required=True)
first_name = forms.CharField(required=False)
last_name = forms.CharField(required=False)

class Meta:
    model = User
    fields = ('username', 'email', 'password1', 'password2') """try add and remove 'parent' here in felds """

def save(self, commit=True):
    user = super(SellerRegisterForm, self).save(commit=False)
    user.email = self.cleaned_data['email']
    user.first_name = self.cleaned_data['first_name']
    user.last_name = self.cleaned_data['last_name']
    user.role = ROLE_SELLER
    # try add user.parent = self.request.user.pk 
    # but it does not work

    if commit:
        user.save()

    return user

views.py

def register_seller(request):
if request.method == 'POST':
    form = SellerRegisterForm(request.POST)     # create form object
    if form.is_valid():
        #try add new_form = form.save(commit=False)
        # new_form.parent = request.user.pk
        # new_form.save() but it not working

        form.save()
        return HttpResponseRedirect('/accounts/login')

else:
    form = SellerRegisterForm()
return render(request, 'register_owner.html', {'form': form})

您需要通過表單的__init__方法傳遞用戶對象。

class SellerRegisterForm(UserCreationForm):
    def __init__(self, *args, **kwargs):
        self.user = kwargs.pop('user', None)
        super(SellerRegisterForm, self).__init__(*args, **kwargs)

並且在您看來:

form = SellerRegisterForm(request.POST, user=request.user)

然后,只需在表單類中的任何位置使用self.user即可。

暫無
暫無

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

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