Python 如何知道模型中是否有用户
我一直在尝试创建一个视图,允许用户创建一个“配置文件”,但是如果用户已经有一个配置文件,那么用户将被重定向到用户可以查看其他人配置文件的页面(为了查看其他人的配置文件,用户必须根据需要创建一个配置文件),为此,我有两个模板,一个具有创建配置文件的表单,另一个显示其他用户的配置文件。错误在于,每个用户都被重定向到mates-form.html,即使是那些已经有配置文件的用户。到目前为止,我认为错误在views.py文件上 models.pyPython 如何知道模型中是否有用户,python,django,django-models,django-forms,django-views,Python,Django,Django Models,Django Forms,Django Views,我一直在尝试创建一个视图,允许用户创建一个“配置文件”,但是如果用户已经有一个配置文件,那么用户将被重定向到用户可以查看其他人配置文件的页面(为了查看其他人的配置文件,用户必须根据需要创建一个配置文件),为此,我有两个模板,一个具有创建配置文件的表单,另一个显示其他用户的配置文件。错误在于,每个用户都被重定向到mates-form.html,即使是那些已经有配置文件的用户。到目前为止,我认为错误在views.py文件上 models.py class Mates(models.Model
class Mates(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='usermates')
users_requests = models.ManyToManyField(User, related_name="users_requests")
req_bio = models.CharField(max_length=400)
req_image = models.ImageField(upload_to='requestmates_pics', null=True, blank=True, default=False)
views.py
def matesmain(request):
contents = Mates.objects.all()
if contents == request.user:
context = {
'contents': contents,
'form_mates': MatesForm(),
}
print("nice3")
return render(request, 'mates.html', context)
else:
return render(request, 'mates-form.html')
def mates(request):
if request.method == 'POST':
form_mates = MatesForm(request.POST, request.FILES)
if form_mates.is_valid():
instance = form_mates.save(commit=False)
instance.user = request.user
instance.save()
return redirect('mates-main')
print('succesfully uploded')
else:
form_mates = MatesForm()
print('didnt upload')
context = {
'form_mates': form_mates,
'contents': Mates.objects.all()
}
return render(request, 'mates-form.html', context)
forms.py
class MatesForm(forms.ModelForm):
class Meta:
model = Mates
fields = ('req_bio', 'req_image',)
exclude = ['user']
mates.html
{% if contents %}
{% for content in contents %}
Here is where the user can see other user's profiles
{% endfor %}
{% endif %}
mates-form.html
<form method="post" enctype="multipart/form-data">
{{ form_mates.as_p }}
</form>
{{form_mates.as_p}
如果您有任何问题或需要查看更多代码,请在评论中告诉我,此外,我还想到了其他方法,从matesmain视图中删除if语句,并在html上使用它们,但这不起作用。我想用户将只有一个配置文件,而不是
ManyToOneRelation
,即ForeignKey
使用OneToOneRelation
与用户模型更好
class Mates(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='usermates')
现在,在创建配置文件时,您可以检查用户配置文件是否已存在,如下所示:
def mates(request):
if Mates.objects.filter(user=request.user).exists():
return redirect('redirect_to_some_view_you_want')
if request.method == 'POST':
form_mates = MatesForm(request.POST, request.FILES)