Django 表单创建和更新关联了内置User模型作为外键字段的模型实例数据

有一个模型长这样,它有个是字段是外键关联了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('无效请求')

就觉得用比较少、简洁的代码,实现需要的功能,感觉很好。也欢迎更好的实现,欢迎交流

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值