我有一个CustomUser模型,ForeignKey指向另一个模型。在我的注册表单中,我使用了一个隐藏字段,该字段根据用户的搜索结果填充一个值(用户正在搜索一个公司,单击结果后,隐藏的输入值表示该公司的ID)。 当我保存用户对象时,我可以很容易地获得ID,进行查询并将company对象添加到字段中。你知道吗
问题出在我的管理员身上。管理员使用的是相同的表单,而company字段被呈现为隐藏ID值。 当我尝试更改某些用户信息并尝试保存时,会出现以下错误: 无法分配“'3'”:客户用户.kompanija必须是“Kompanija”实例。你知道吗
我以为管理员正在使用来自我的自定义UserAccountAdapter的相同save方法。。。?你知道吗
是否可以覆盖隐藏的输入,以便管理员显示:
forms.ModelChoiceField(queryset=Kompanija.objects.all(), empty_label="Kompanija")
使用保存的用户对象的初始值?你知道吗
我的型号.py地址:
class Kompanija(models.Model):
naziv = models.CharField(max_length=50)
adresa = models.CharField(max_length=50, blank=True)
def __str__(self):
return self.naziv
class CustomUser(AbstractUser):
ime = models.CharField(max_length=30, default='')
prezime = models.CharField(max_length=30, default='')
kompanija = models.ForeignKey(Kompanija, on_delete=models.CASCADE, null=True, blank=True)
is_premium = models.BooleanField('premium status', default=False)
def __str__(self):
return self.email
我的表单.py地址:
class CustomUserCreationForm(UserCreationForm):
ime = forms.CharField(max_length=30, label='Ime')
prezime = forms.CharField(max_length=30, label='Prezime')
kompanija = forms.CharField(widget=forms.HiddenInput())
class Meta(UserCreationForm):
model = CustomUser
fields = ('username', 'email', 'ime', 'prezime')
class CustomUserChangeForm(UserChangeForm):
ime = forms.CharField(max_length=30, label='Ime')
prezime = forms.CharField(max_length=30, label='Prezime')
kompanija = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = CustomUser
fields = ('username', 'email', 'ime', 'prezime')
class CustomSignupForm(SignupForm):
ime = forms.CharField(max_length=30, label='Ime')
prezime = forms.CharField(max_length=30, label='Prezime')
kompanija = forms.CharField(widget=forms.HiddenInput())
class Meta:
model = CustomUser
def signup(self, request, user):
user.ime = self.cleaned_data['ime']
user.prezime = self.cleaned_data['prezime']
user.kompanija = Kompanija.objects.get(id=self.cleaned_data['kompanija'])
user.save()
return user
我的适配器.py地址:
class UserAccountAdapter(DefaultAccountAdapter):
def save_user(self, request, user, form, commit=True):
user = super(UserAccountAdapter, self).save_user(request, user, form, commit=False)
user.ime = form.cleaned_data.get('ime')
user.prezime = form.cleaned_data.get('prezime')
user.kompanija = Kompanija.objects.get(id=form.cleaned_data.get('kompanija'))
user.save()
我的管理员.py地址:
class CustomUserAdmin(UserAdmin):
add_form = CustomUserCreationForm
form = CustomUserChangeForm
model = CustomUser
list_display = ['email', 'ime', 'prezime', 'username', 'kompanija', 'is_premium']
fieldsets = (
(('Korisnik'), {'fields': ('email', 'ime', 'prezime', 'username', 'kompanija', 'is_premium')}),
)
admin.site.register(CustomUser, CustomUserAdmin)
admin.site.register(Kompanija)
我的设置.py地址:
ACCOUNT_FORMS = {
'signup': 'korisnici.forms.CustomSignupForm',
}
ACCOUNT_ADAPTER = 'korisnici.adapter.UserAccountAdapter'
经过更多的研究和崩溃我的网站,我找到了一个解决办法。 我需要在我的表单.py只是为了管理网站。你知道吗
在我的表单.py我补充说:
还有我的管理员.py地址:
现在一切正常了。你知道吗
相关问题 更多 >
编程相关推荐