我如何在“个人”字段中自动为用户设置外键集

问题描述

这是我的views.py

@login_required(login_url='/login')
def user_edit(request,user_id):

    if request.method == 'POST':
        user = User.objects.get(id=user_id)

        form = ProfileForm(request.POST or None,instance=user)

        if form.is_valid():
            i = form.save(commit=False)
            i.user = request.user
            i.save()
            return redirect('list')
        else:
            form = ProfileForm()
        return render(request,"home/intro.html",{'form': form})

    else:
        return render(request,"home/intro.html")

这是我的表格。py

from django import forms
from django.forms import ModelForm
from .models import Profile


class ProfileForm(forms.ModelForm):
    class Meta:
        model = Profile
        fields = '__all__'

这是我的模特。py

from django.contrib.auth.models import User
from django.db import models


class Profile(models.Model):
    img = models.ImageField(upload_to='imgs/')
    about = models.TextField(max_length=255,null=False)
    phnum = models.IntegerField()
    uname = models.CharField(max_length=255,null=False)
    person = models.ForeignKey(User,on_delete=models.CASCADE,null=True)

    def __str__(self):
        return self.about

我如何将person设置为当前登录用户ID ... ??? 我想将用户ID保存到该外键,以便如果我删除用户,那么该用户的个人资料也将被删除

urls.py

from django.urls import path
from . import views
from django.conf import settings
from django.conf.urls.static import static

urlpatterns = [
    path('',views.home,name="home"),path('signup/',views.user_crete,name="signup"),path('login/',views.user_login,name="login"),path('logout/',views.user_logout,name="logout"),path('edit/',views.user_edit,name="edit"),path('list/',views.user_list,name="list"),]+ static(settings.MEDIA_URL,document_root=settings.MEDIA_ROOT)

模板

{% extends 'base.html' %}

{% block content %}

<h2 class="text-center mt-2">Setup Your Profile</h2>
<div class="col-md-6 offset-md-3">

<form class="mt-2" method="post" action="{% url 'edit' %}" enctype="multipart/form-data">{% csrf_token %}
  <div class="form-group">
    <label>Uname</label><br>
    <input type="text" class="form-control" placeholder="{{ user.username }}" name="uname" value="{{ user.username }}" readonly>
  </div>

  <div class="form-group">
    <label>Profile Picture</label><br>
    <input type="file" name="img">
  </div>
  <div class="form-group">
    <label>About Your Self</label><br>
    <input type="textBox" class="form-control" placeholder="Write about yourself" name="about">
  </div>
  <div class="form-group">
    <label>Phone Number</label><br>
    <input type="number" class="form-control" placeholder="Enter your Number" name="phnum">
  </div>



  <center><button type="submit" class="btn btn-primary">Edit</button></center>
</form>
</div>


{% endblock %}

我在其中创建了特定用户的个人资料的位置添加了模板,还添加了urls.py文件以覆盖更多大陆

解决方法

在模型中,person是用户的字段,但是您写的视图i.user应该写i.person

@login_required(login_url='/login')
def user_edit(request,user_id):

    if request.method == 'POST':
        user = User.objects.get(id=user_id)

        form = ProfileForm(request.POST or None,instance=user)

        if form.is_valid():
            i = form.save(commit=False)
            i.person = request.user  # change here
            i.save()
            return redirect('list')
        else:
            form = ProfileForm()
        return render(request,"home/intro.html",{'form': form})

    else:
        return render(request,"home/intro.html")

urls.py 在您的网址中传递用户ID

path('edit/<int:user_id>/',views.user_edit,name="edit"),

模板 通过user.id采取行动

<form class="mt-2" method="post" action="{% url 'edit' user.id %}" enctype="multipart/form-data">
   {% csrf_token %}
   ...