如何在Django中自动检测用户 编辑(基于user_register_model模型)

如何在Django中检测用户!我看到大多数人使用外键,但我不希望外键我想检测没有外键的用户我想检测哪个用户填写此表格,例如测试或其他内容

这是我的views.py

def buy_form(request):
    if request.method == 'POST':
        usr_buy = user_buy_form(request.POST)
        if usr_buy.is_valid():
            usr_buys = usr_buy.save(commit=False)
            usr_buys.save()
        else:
            return print(usr_buy.errors)

    else:
        usr_buy = user_buy_form()

    context = {'usr_buy':usr_buy}

    return render(request,'user_buy.html',context)      

这是我的models.py

class user_register_model(models.Model):
    user = models.OneToOneField(User,on_delete=models.CASCADE)
    join_date = models.DateTimeField(default=timezone.now)

    def __str__(self):
        return self.user.username

class user_buy(models.Model):
    users = models.ForeignKey(user_register_model,on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    payment_method = models.CharField(max_length=500)
    price = models.IntegerField()
    Trade_limits = models.IntegerField()
    Location = models.CharField(max_length=1000)

    def __str__(self):
        return self.users.user.username

这是我的urls.py

urlpatterns = [
    path('',views.Buy_List_View.as_view(),name='index'),path('accounts/signup/',views.user_reg,name='register'),path('profile/<username>',views.user_profile,name='user_profile'),path('sell_btc/',views.buy_form,name='buy_form')
]

这是我的user_buy.html

{% extends 'base.html' %}
{% block body_block %}
<form class="form-control" method="POST">
    {{usr_buy.as_p}}
</form>
{% endblock %}

这是我的forms.py

class user_buy_form(forms.ModelForm):
    class Meta():
        model = user_buy
        fields = '__all__'
gechenlei 回答:如何在Django中自动检测用户 编辑(基于user_register_model模型)

这可以使用 django信号处理程序完成, 您可以通过注册想要观看的内容和观看时间来获得信号。

在您的示例中, 观看什么?

  • 用户表(用户模型)

何时观看?

  • 保存前传入数据(在您的情况下为用户)是 使用“ pre_save”处理程序在“用户”模型中定义。

  • 或之后的 使用“ post_save”处理程序保存数据。

如何观看?

此外,您可以启用来自django的审核日志,以查看执行了哪些操作。 https://django-auditlog.readthedocs.io/en/latest/

,

首先,您应该从表单中排除users字段:

class user_buy_form(forms.ModelForm):
    class Meta():
        model = user_buy
        exclude = ('users',)

然后,在保存您的user_buy实例之前,您应该将用户添加到其中:

def buy_form(request):
    if request.method == 'POST':
        usr_buy = user_buy_form(request.POST)
        if usr_buy.is_valid():
            usr_buys = usr_buy.save(commit=False)
            usr_buys.users = request.user
            usr_buys.save()
        else:
            return print(usr_buy.errors)

    else:
        usr_buy = user_buy_form()

    context = {'usr_buy':usr_buy}

    return render(request,'user_buy.html',context)    

编辑(基于user_register_model模型)

由于您拥有django用户模型的一对一字段,因此应基于user_register_model查找request.user实例:

def buy_form(request):
    if request.method == 'POST':
        usr_buy = user_buy_form(request.POST)
        if usr_buy.is_valid():
            usr_buys = usr_buy.save(commit=False)
            user_register_obj = user_register_model.objects.get(user=request.user)
            usr_buys.users = user_register_obj
            usr_buys.save()
        else:
            return print(usr_buy.errors)

    else:
        usr_buy = user_buy_form()

    context = {'usr_buy':usr_buy}

    return render(request,context)    
本文链接:https://www.f2er.com/3110315.html

大家都在问