Как сделать поле имени пользователя Django экземпляром в представлении

Я работаю над проектом Django Ticketing, где я хочу, чтобы гость активировал PIN-код билета, а затем зарегистрировался на мероприятии, на которое он купил билет. И я хочу, чтобы у гостевого пользователя был доступ для входа в систему и обновления профиля. Проблема в том, что у меня есть страница просмотра формы активации PIN-кода, а затем следует форма регистрации гостя, которая дает гостю доступ к предоставлению имени пользователя и пароля для входа после успешной регистрации, чтобы он мог обновить свой профиль. У меня есть две проблемы с моим кодом следующим образом:

  1. Мне нужно, чтобы значение PIN хранилось в модели гостя, поэтому я хочу получить значение PIN из представления активации PIN в представление регистрации гостя (либо по сессии, но не хочу, чтобы поле формы PIN повторялось, как это сделал я) и
  2. .
  3. Я также хочу хранить имя пользователя гостя из формы регистрации как экземпляр в модели гостя. Я хочу сохранить имя пользователя гостя и значение PIN-кода в модели гостя, чтобы иметь возможность получить профиль гостя и данные PIN-кода для Gate Pass. В результате моих проб я получаю следующие ошибки: Невозможно присвоить "'APOLLOS'": "Guest.guest_name" должен быть экземпляром "User".
  4. .

Ниже представлены мои модели:

class Guest(models.Model):
    guest_name = models.OneToOneField(User, on_delete=models.CASCADE, blank=True) 
    pin = models.CharField(max_length=6, default='No Pin', blank=True)


    def __str__(self):
        return f"{self.guest_name}"

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE, null = True)
    surname = models.CharField(max_length=20, null=True)
    othernames = models.CharField(max_length=40, null=True)
    gender = models.CharField(max_length=6, choices=GENDER, blank=True, null=True)
    phone = PhoneNumberField()
    image = models.ImageField(default='avatar.jpg', blank=False, null=False, upload_to ='profile_images', 
)
    def __str__(self):
        return f'{self.user.username}-Profile'

class Pin(models.Model):
    ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE)
    value = models.CharField(max_length=6, default=generate_pin, blank=True)
    added = models.DateTimeField(auto_now_add=True,  blank=False)
    reference = models.UUIDField(primary_key = True, editable = False, default=uuid.uuid4)
    status = models.CharField(max_length=30, default='Not Activated')

    #Save Reference Number
    def save(self, *args, **kwargs):
        self.reference == str(uuid.uuid4())
        super().save(*args, **kwargs) 

    def __unicode__(self):
        return self.ticket

    class Meta:
        unique_together = ["ticket", "value"]

    def __str__(self):
        return f"{self.ticket}"

    def get_absolute_url(self):
        return reverse("pin-detail", args=[str(self.id)])

Мой код Просмотров:

Прошу кого-нибудь помочь с наилучшим способом решения этой проблемы. Спасибо

Вы не можете сохранить квест как Пользователь таким образом. Сделайте что-то вроде этого. Из вашей формы получите имя пользователя. Затем создайте нового пользователя с этим именем и создайте гостя с этим новым пользователем.

  //simple form --> get it in youre template
  class GuestUserForm(forms.Form):
    username = forms.CharField()
    password=forms.CharField()

  //create new user from the form in template
  user_guest = form.cleaned_data.get("username")
            new_user = User.objects.create_user(username=user_guest)

  //create new guest with created user
  Guest.objects.create(guest_name=new_user)

//youre view function 
def register_guest(request):
    if request.method == 'POST':
        form = GuestUserForm(request.POST)
        if form.is_valid():
            user_guest = form.cleaned_data.get("username")
            print(user_guest)
            new_user = User.objects.create_user(username=user_guest)
            Guest.objects.create(guest_name=new_user)

    form = GuestUserForm()
    return render(request, "index.html",{"form":form})
Вернуться на верх