Итак, я расширил свою пользовательскую модель с помощью OneToOneField.Моя цель - предоставить пользователю типа «Менеджер» возможность создавать пользователей-сотрудников.
Одна из главных проблем, с которыми я сталкиваюсь, - это заполнение поля внешнего ключа пивоваренного завода.По какой-то причине, каждый раз, когда я отправляю форму с выбранным пивоваренным заводом, я получаю «Невозможно вставить значение NULL в столбец« brewery_id »», даже если был выбран brewery_id.Однако пользователь все еще создается, но не расширенная клиентская часть.
В идеале я бы хотел, чтобы brewery_id заполнялся для нового пользователя на основе менеджера, который его создает.
Я знаю, что мойпроблема лежит где-то на мой взгляд, но все примеры, которые я могу найти, предназначены только для обновления текущего пользователя.
models.py:
class Customer(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
brewery = models.ForeignKey(Brewery, models.DO_NOTHING)
phone_number = models.CharField(max_length=20)
phone_carrier = models.CharField(max_length=80)
role = models.CharField(max_length=60)
class Meta:
managed = True
@receiver(post_save, sender=User)
def create_user_profile(sender, instance, created, **kwargs):
if created:
Customer.objects.create(user=instance)
@receiver(post_save, sender=User)
def save_user_profile(sender, instance, **kwargs):
instance.customer.save()
forms.py:
class UserRegisterForm(UserCreationForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['username', 'email', 'password1', 'password2']
class CustomerForm(forms.ModelForm):
class Meta:
model = Customer
fields = ('brewery', 'phone_number', 'phone_carrier', 'role')
views.py:
@login_required
def adminsite_register(request):
if request.method == 'POST':
user_form = UserRegisterForm(request.POST)
cust_form = CustomerForm(request.POST)
if user_form.is_valid() and cust_form.is_valid():
user_form.save()
cust_form.save()
messages.success(request, f'Account has been created! You can now log in.')
return redirect('index')
else:
messages.error(request, f'Please correct the errors.')
else:
user_form = UserRegisterForm(request.POST)
cust_form = CustomerForm(request.POST)
return render(request, "AdminSite/adminControls.html", {'user_form': user_form, 'cust_form': cust_form})