Сохраните анонимные данные пользователя и карту с пользователем после регистрации или войдите в систему django - PullRequest
1 голос
/ 24 апреля 2020

Здравствуйте, у меня есть приложение, куда пользователь приходит, он получает список предметов, которые он выбирает, столько, сколько он будет sh, затем он нажимает «добавить в корзину», где он перенаправляется на страницу, где он видит выбранный товар и общую стоимость. Теперь, чтобы продолжить, я хочу, чтобы пользователь вошел в систему или зарегистрировался, и после того, как он вошел в систему или зарегистрировался, он получает карту с выбранным товаром и ценой, а данные сохраняются в базе данных. У меня есть приложение, которое идеально подходит для входа в систему, но я хочу, чтобы оно было анонимным. пользователь, который сначала выбирает элементы, а затем go для регистрации / входа в систему.

models.py
class UserSelectTest(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    testselected = models.TextField()

class UserTest(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    name = models.CharField(max_length=255)
    email = models.EmailField()
    number = models.IntegerField()
    location = models.CharField(max_length=255)
    time = models.IntegerField()
    totalprice = models.CharField(max_length=255,null=True)
    test_submitted = models.BooleanField()
views.py 

def ResultTest(request):
    var = request.POST.get('selectedTests')
    abc = UserSelectTest()
    abc.user = request.user
    abc.testselected = request.POST['selectedTests']
    abc.save()


def PostTest(request):
    if request.method == 'POST':
        test = UserTest()
        test.user = request.user
        test.name = request.POST['name']
        test.email = request.POST['email']
        test.number = request.POST['number']
        test.location = request.POST['location']
        test.time = request.POST['time']
        test.totalprice = request.POST['price']
        test.test_submitted = True
        test.save()

У меня есть две функции, в которых «ResultTest» хранит элемент, выбранный пользователем, и общую цену, а другую Просмотр «PostTest» хранит дополнительные данные. Это отлично работает для пользователей, которые уже вошли в систему. Сейчас я пытаюсь найти анонимного пользователя с таким же рабочим процессом.

1 Ответ

0 голосов
/ 24 апреля 2020

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

session_id = models.CharField(max_length=32, null=True)

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

user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)

В ваших видениях вы можете получить идентификатор сеанса любого пользователя из request.session.session_key. Вы сохраняете значения корзины для незарегистрированного пользователя с этим ключом. Когда пользователь регистрируется, вы просто обновляете поле user для этого пользователя, совпадая с его session_id, если есть.

...