[英]Django 'UNIQUE constraint failed' when post same massages
I am building a socialsite.我正在建立一个社交网站。 In this site user create group and post messages.
在此站点中,用户创建组并发布消息。 I get this error when user put same message in same group or even in other group.
当用户将相同的消息放入同一组甚至其他组时,我会收到此错误。
**IntegrityError at /posts/new/ ** IntegrityError 在 /posts/new/
UNIQUE constraint failed: posts_post.user_id, posts_post.message唯一约束失败:posts_post.user_id、posts_post.message
Request Method: POST请求方式:POST
Request URL: http://127.0.0.1:8000/posts/new/请求网址: http : //127.0.0.1 : 8000/posts/new/
Django Version: 3.2.4 Django 版本:3.2.4
Exception Type: IntegrityError异常类型:IntegrityError
Exception Value: UNIQUE constraint failed: posts_post.user_id, posts_post.message异常值:唯一约束失败:posts_post.user_id、posts_post.message
Exception Location: F:\\Program Files\\envs\\MyDjangoEnv\\lib\\site-packages\\django\\db\\backends\\sqlite3\\base.py, line 423, in execute异常位置:F:\\Program Files\\envs\\MyDjangoEnv\\lib\\site-packages\\django\\db\\backends\\sqlite3\\base.py, line 423, in execute
Python Executable: F:\\Program Files\\envs\\MyDjangoEnv\\python.exe** Python 可执行文件:F:\\Program Files\\envs\\MyDjangoEnv\\python.exe**
Here is models.py:这是models.py:
class Post(models.Model):
user = models.ForeignKey(User, related_name="posts",on_delete=models.CASCADE)
created_at = models.DateTimeField(auto_now=True)
message = models.TextField()
message_html = models.TextField(editable=False)
group = models.ForeignKey(Group, related_name="posts",null=True, blank=True,on_delete=models.CASCADE)
def __str__(self):
return self.message
def save(self, *args, **kwargs):
self.message_html = misaka.html(self.message)
super().save(*args, **kwargs)
def get_absolute_url(self):
return reverse(
"posts:single",
kwargs={
"username": self.user.username,
"pk": self.pk
}
)
class Meta:
ordering = ["-created_at"]
unique_together = ["user", "message"]
views.py:视图.py:
class PostList(SelectRelatedMixin, generic.ListView):
model = models.Post
select_related = ("user", "group")
class UserPosts(generic.ListView):
model = models.Post
template_name = "posts/user_post_list.html"
def get_queryset(self):
try:
self.post_user = User.objects.prefetch_related("posts").get(
username__iexact=self.kwargs.get("username")
)
except User.DoesNotExist:
raise Http404
else:
return self.post_user.posts.all()
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["post_user"] = self.post_user
return context
class PostDetail(SelectRelatedMixin, generic.DetailView):
model = models.Post
select_related = ("user", "group")
def get_queryset(self):
queryset = super().get_queryset()
return queryset.filter(
user__username__iexact=self.kwargs.get("username")
)
class CreatePost(LoginRequiredMixin, SelectRelatedMixin, generic.CreateView):
# form_class = forms.PostForm
fields = ('message','group')
model = models.Post
def form_valid(self, form):
self.object = form.save(commit=False)
self.object.user = self.request.user
self.object.save()
return super().form_valid(form)
forms.py表格.py
class PostForm(forms.ModelForm):
class Meta:
fields = ("message", "group")
model = models.Post
def __init__(self, *args, **kwargs):
user = kwargs.pop("user", None)
super().__init__(*args, **kwargs)
if user is not None:
self.fields["group"].queryset = (
models.Group.objects.filter(
pk__in=user.groups.values_list("group__pk")
)
)
urls.py网址.py
urlpatterns = [
path('', views.PostList.as_view(), name="all"),
path("new/", views.CreatePost.as_view(), name="create"),
path("by/<username>/",views.UserPosts.as_view(),name="for_user"),
path("by/<username>/<int:pk>/",views.PostDetail.as_view(),name="single"),
path("delete/<int:pk>/",views.DeletePost.as_view(),name="delete"),
]
your error are here:你的错误在这里:
unique_together = ["user", "message"]
here you are saying that you can only have one message for each user在这里,您是说每个用户只能有一条消息
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.