NOT NULL constraint failed: products_product.vendor_id django

недавно я изменил форму пользователя проекта на абстрактного базового пользователя и мои пользователи не могут добавлять товары или просматривать свой профиль, я знаю, что проблема в views.py и forms.py, но на что бы я ее не изменил, все равно есть некоторые проблемы, помимо ошибки в заголовке.

views.py

rom django.urls import reverse_lazy
from django.views import generic
from django.contrib.auth.forms import   UserChangeForm 

from django.utils.text import slugify
from django.shortcuts import render, redirect
from .models import  NewUser
from products.models import Product
from .forms import ProductForm
from .forms import UserCreationForm
# Create your views here.
def become_vendor(request):
    if request.method == 'POST':
        form = UserCreationForm(request.POST)

        if form.is_valid():
            user = form.save()
            login(request, user)
            vendor = NewUser.objects.create(user_name=user.first_name)

            return redirect('home')
    else:
        form = UserCreationForm()   

    return render(request, 'vendor/become_vendor.html', {'form': form})




@login_required
def vendor_admin(request):
   context = {
       'user':request.user

   }
   vendor = request.user.user_name
   
   return render(request,'vendor/vendor_admin.html',{'vendor': vendor ,'context':context})

@login_required
def add_house(request):
    if request.method == 'POST':
    
     form = ProductForm (request.POST, request.FILES)

     if form.is_valid():
       product = form.save(commit=False)
       NewUser.user_name = request.user.user_name
       product.slug = slugify(product.عنوان)
       product.save()
       return redirect('vendor_admin')
    else:
        form = ProductForm()  
        return render(request,'vendor/add_house.html',{'form': form})
class UserEditView(generic.UpdateView):
    models = NewUser
    form_class = UserChangeForm
    template_name = 'vendor/edit_profile.html'
    seccess_url = reverse_lazy('vendor_admin')
    def get_object(self):
     return self.request.user

forms.py

rom django.forms import ModelForm
from products.models import Product
from django import forms
from django.contrib.auth.models import Group
from django.contrib.auth.forms import ReadOnlyPasswordHashField
from .models import NewUser


class ProductForm(ModelForm):
    class Meta:
        model = Product
        fields =['نوع_قرارداد','عنوان','تصاویر','قیمت','توضیحات']
       



class RegistrationForm(forms.ModelForm):
    password = forms.CharField(label='Password', widget=forms.PasswordInput)
    class Meta:
        model = NewUser
        fields = ( 'user_name', 'email','phone','password')

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password"])
        if commit:
            user.save()
        return user


class UserCreationForm(forms.ModelForm):
    password1 = forms.CharField(label='رمزعبور', widget=forms.PasswordInput)
    password2 = forms.CharField(label='تایید رمزعبور', widget=forms.PasswordInput)

    class Meta:
        model = NewUser
        fields = ('user_name', 'email' ,'phone',  'profile_pic',)

    def clean_password2(self):
        # Check that the two password entries match
        password1 = self.cleaned_data.get("password1")
        password2 = self.cleaned_data.get("password2")
        if password1 and password2 and password1 != password2:
            raise forms.ValidationError("گذرواژه ها مطابقت ندارند")
        return password2

    def save(self, commit=True):
        # Save the provided password in hashed format
        user = super().save(commit=False)
        user.set_password(self.cleaned_data["password1"])
        if commit:
            user.save()
        return user


class UserChangeForm(forms.ModelForm):
    password = ReadOnlyPasswordHashField()

    class Meta:
        model = NewUser
        fields = ( 'user_name','email','phone', 'about', 'profile_pic',)

    def clean_password(self):
        
        return self.initial["password"]

Я не знаю, могут ли модели быть проблемой или нет, но я добавляю их в любом случае

models.py

from django.db import models
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager


class CustomAccountManager(BaseUserManager):

    def create_superuser(self, email, user_name, first_name, password, **other_fields):

        other_fields.setdefault('is_staff', True)
        other_fields.setdefault('is_superuser', True)
        other_fields.setdefault('is_active', True)

        if other_fields.get('is_staff') is not True:
            raise ValueError(
                'Superuser must be assigned to is_staff=True.')
        if other_fields.get('is_superuser') is not True:
            raise ValueError(
                'Superuser must be assigned to is_superuser=True.')

        return self.create_user(email, user_name, first_name, password, **other_fields)

    def create_user(self, email, user_name, first_name, password, **other_fields):

        if not email:
            raise ValueError(_('لطفا یک ادرس ایمیل بدهید'))

        email = self.normalize_email(email)
        user = self.model(email=email, user_name=user_name,
                          first_name=first_name, **other_fields)
        user.set_password(password)
        user.save()
        return user

def get_profile_image_filepath(self,filename):
                    return f'uploads/{self.pk}/{"profile.png"}' 
def get_default_profile_image():
                    return "uploads/profiled.png"           


class NewUser(AbstractBaseUser, PermissionsMixin):

    email = models.CharField(_('ایمیل'),max_length=255 ,unique=True)
    user_name= models.CharField(_('نام کاربری'),max_length=255, unique=True)
    first_name = models.CharField(_('نام مسکن'),max_length=255 , blank=True)
    phone = models.CharField(_('شماره همراه'),max_length=50, blank=True)
    تاریخ_ثبت_نام = models.DateTimeField(verbose_name='تاریخ_ثبت_نام', auto_now_add=True)
    اخرین_ورود = models.DateTimeField(verbose_name='اخرین_ورود', auto_now=True)
    about = models.TextField(_(
        'درباره شما'), max_length=500, blank=True)
    is_staff = models.BooleanField(default=False)
    is_active = models.BooleanField(default=False)
    profile_pic = models.ImageField(_('عکس پروفایل'),max_length=255 ,upload_to=get_profile_image_filepath,null=True ,blank=True, default=get_default_profile_image)

    objects = CustomAccountManager()

    USERNAME_FIELD = 'email'
    REQUIRED_FIELDS = ['user_name', 'first_name']

    def __str__(self):
        return self.user_name    
    def get_profile_image_filenames(self):
                    return str(self.profile_pic)[str(self.profile_pic).index(f'uploads/{self.pk})/'):]

пожалуйста, примите во внимание тот факт, что я новичок в django я очень прошу помощи для моего проекта и если была допущена какая-либо другая ошибка, пожалуйста, сообщите мне, я буду очень признателен за это.

Вернуться на верх