首先,如果您希望您的用户名仅由 request.user 设置,然后将 editable=False 添加到 Post 模型中的用户名字段。
username = models.ForeignKey(User, on_delete=models.CASCADE, related_name='usernames', editable=False)
然后在您的 admin.py 中:
from . import models
from django.contrib import admin
class PostAdmin(admin.ModelAdmin):
def save_model(self, request, obj, form, change):
obj.username = request.user
obj.save()
admin.site.register(models.Post, PostAdmin)
编辑从这里开始
models.py
from django.db import models
from django import forms
class Post(models.Model):
article = models.TextField(max_length=2000)
username = models.ForeignKey(User, on_delete=models.CASCADE, related_name='usernames') # we don't need editable=False anymore
updated_at = models.DateTimeField(auto_now=True)
class PostForm(forms.ModelForm):
class Meta:
model = Post
fields = '__all__'
views.py
from . import models
from django.shortcuts import render, get_object_or_404
from django.contrib import messages
def post(request, id):
post = get_object_or_404(models.Post, id=id) # get a specific post with id
if request.method == 'POST':
form = models.PostForm(request.POST, instance=post) # create a post form instance
if form.is_valid():
data = models.Post() # create a post model instance
data.article = form.cleaned_data['article']
data.username = request.user
# updated_at field updating automatically
data.save() # dont't forget to save these data
messages.success(request, 'Article updated successfully') # this line is optional
else:
messages.success(request, form.errors) # this line is optional
else:
form = models.PostForm(instance=post)
return render(request, 'post.html', {'form': form})
urls.py
from django.urls import path
from . import views
app_name = 'post'
urlpatterns = [
path('post/<int:id>', views.post, name='article'),
]
html(模板) 没有小部件调整(简单形式)
<form method="POST">
{% csrf_token %}
{{ form.as_p }}
<button type="submit">Send</button>
</form>
html(模板) 带有小部件调整和引导类(可选)
{% load widget_tweaks %}
<form method="POST">
{% csrf_token %}
{% for field in form %}
<div class="form-group">
<div class="form-control-border"></div>
{{ field.label }}
{% render_field field class="form-control" %}
</div>
{% endfor %}
<button type="submit" class="btn btn-outline-primary-2">Send</button>
</form>
如果有错误请告诉我