有一个模型长这样,它有个是字段是外键关联了User模型
models.py
from django.db import models
from django.contrib.auth.models import User
class Article(models.Model):
title = models.CharField(max_length=10)
content = models.TextField(max_length=5000)
author = models.ForeignKey(User, on_delete=models.CASCADE)
希望登录的用户就是文章的作者,所以在表单中排除了作者字段
forms.py
from django import forms
from .models import Article
class ArticleForm(forms.ModelForm):
class Meta:
model = ArticleModel
exclude = ['author']
views.py
from .forms import ArticleForm
from django.contrib.auth.models import User
from .models import Article
def create(request):
if request.method == 'GET':
article_form = ArticleForm()
return render(request, 'edit_article.html', locals())
elif request.method == 'POST':
user = User.objects.get_by_natural_key(username=request.user)
article_form = ArticleForm(data=request.POST)
article = Article.objects.create(**article_form.cleaned_data, author=user)
if article is not None and isinstance(article, Article):
return HttpResponse('成功了')
else:
return HttpResponse('失败了')
else:
return HttpResponse('无效请求')
def edit(request, articleid):
article = Article.objects.get(pk=int(articleid))
if request.method == 'GET':
article_form = ArticleForm(instance=article)
return render(request, 'edit_article.html', locals())
elif request.method == 'POST':
article_form = ArticleForm(data=request.POST, instance=article)
if article_form.is_valid():
article_form.save()
return HttpResponse('成功了')
else:
return HttpResponse('失败了')
else:
return HttpResponse('无效请求')
就觉得用比较少、简洁的代码,实现需要的功能,感觉很好。也欢迎更好的实现,欢迎交流