Как создать разные таблицы базы данных для типов пользователей в Django?
Вот что я пытаюсь сделать.
Проект имеет два типа пользователей:
- Spot Owners
- Spot Rentee
Владельцы могут добавить слот, арендаторы могут забронировать слот.
Вот мой код:
models.py:
class UsersManager(BaseUserManager):
def create_user(self, nid, password=None):
if not nid:
raise ValueError('Users must have an nid address')
user = self.model(
nid=self.normalize_email(nid),
)
user.set_password(password)
user.save(using=self._db)
return user
class Users(AbstractBaseUser):
user_type = (
('R', 'Rentee'),
('S', 'Spot Owner'),
)
nid = models.CharField(max_length=30, unique=True, primary_key=True)
name = models.CharField(max_length=200)
email = models.CharField(max_length=200)
password = models.CharField(max_length=128)
contact = models.CharField(max_length=15, null=True)
last_login = models.DateTimeField(auto_now_add=True, null=True)
is_spot_owner = models.CharField(max_length=10, choices=user_type,default='user')
USERNAME_FIELD = 'nid'
objects = UsersManager()
def __str__(self):
return self.nid
class SpotOwner(Users,models.Model):
owner_info = models.CharField(max_length=200)
def __str__(self) -> str:
return self.nid.nid
class Rentee(models.Model):
nid = models.ForeignKey(Users, on_delete=models.CASCADE)
vehicle_type = models.CharField(max_length=200)
rentee_credit = models.IntegerField()
def __str__(self):
return self.name
forms.py:
class UserForm(ModelForm):
class Meta:
model = Users
fields = '__all__'
class OwnerForm(ModelForm):
class Meta:
model = SpotOwner
fields = '__all__'
views.py:
def signup(request):
form = UserForm(request.POST)
print("Errors",form.errors)
if request.method == 'POST':
print(request.POST)
if form.is_valid():
user = form.save()
user.set_password(request.POST.get('password'))
user.save()
nid = request.POST.get('nid')
password = request.POST.get('password')
user = authenticate(request, nid=nid, password=password)
login(request,user,backend='django.contrib.auth.backends.ModelBackend')
messages.success(request, 'User created successfully')
return redirect('/')
else:
print("Form invalid")
context = {'form': form}
return render(request, 'home/signup.html',context=context)
Now, I can populate the database. But there is one single table users. The issue is I cannot create a OneToOne relation with Owners only. [Owners adds slots]
enter image description here How can I create a different table and populate data from one form? If user is Owner then populate owner table else populate rentee table from the combined table that I am getting?
Я изучаю Django. Любая помощь будет высоко оценена.