پیادهسازی منطق یکتایی در متدهای create و update جنگو
GitHub实现Django REST Framework自定义ViewSet,在create和update方法中手动处理字段唯一性逻辑。通过查询排除当前实例防止编辑报错,确保业务层数据唯一性约束。
Trigger Scenarios
Install
npx skills add ECNU-ICALK/AutoSkill --skill پیادهسازی منطق یکتایی در متدهای create و update جنگو -g -y
SKILL.md
Frontmatter
{
"id": "7228ae8a-6451-4b77-af85-599eb2aa4a3d",
"name": "پیادهسازی منطق یکتایی در متدهای create و update جنگو",
"tags": [
"Django",
"REST Framework",
"ViewSet",
"Validation",
"Uniqueness"
],
"version": "0.1.0",
"triggers": [
"جلوگیری از رکورد تکراری در ویو ست",
"بررسی یکتایی فیلد در create و update",
"خطای تکراری بودن هنگام put در django rest framework",
"پیادهسازی شرط exists در viewset"
],
"description": "این مهارت برای ایجاد یک ViewSet سفارشی در Django REST Framework استفاده میشود که از ایجاد رکوردهای تکراری بر اساس یک فیلد خاص جلوگیری کرده و اجازه ویرایش رکورد فعلی را بدون خطای تکراری بودن میدهد."
}
پیادهسازی منطق یکتایی در متدهای create و update جنگو
این مهارت برای ایجاد یک ViewSet سفارشی در Django REST Framework استفاده میشود که از ایجاد رکوردهای تکراری بر اساس یک فیلد خاص جلوگیری کرده و اجازه ویرایش رکورد فعلی را بدون خطای تکراری بودن میدهد.
Prompt
Role & Objective
شما یک توسعهدهنده Django REST Framework هستید. هدف شما پیادهسازی یک ModelViewSet است که محدودیت یکتایی (Uniqueness) را برای یک فیلد خاص (مانند user_id) به صورت دستی در متدهای create و update مدیریت میکند.
Operational Rules & Constraints
- متد create: این متد را بازنویسی (Override) کنید. قبل از ذخیره، بررسی کنید که آیا رکوردی با مقدار فیلد خاص وجود دارد یا خیر (
Model.objects.filter(field=value).exists()). اگر وجود داشت، پاسخ خطای 400 Bad Request برگردانید. در غیر این صورت، رکورد را ذخیره کرده و پاسخ 201 Created ارسال کنید. - متد update: این متد را بازنویسی کنید. نمونه فعلی را با
self.get_object()دریافت کنید. برای بررسی تکراری بودن، ازModel.objects.filter(field=value).exclude(pk=instance.pk).exists()استفاده کنید تا رکورد فعلی از بررسی حذف شود. اگر رکورد تکراری دیگری وجود داشت، پاسخ 400 برگردانید. در غیر این صورت، بهروزرسانی را انجام داده و پاسخ 200 OK ارسال کنید. - کدهای وضعیت: از
status.HTTP_201_CREATEDبرای ایجاد موفق،status.HTTP_200_OKبرای بهروزرسانی موفق وstatus.HTTP_400_BAD_REQUESTبرای خطاهای اعتبارسنجی استفاده کنید. - مدیریت 404: به متد
get_object()اجازه دهید خطای 404 Not Found را به صورت خودکار در صورت عدم یافتن رکورد مدیریت کند.
Anti-Patterns
- در متد update فراموش نکنید که رکورد فعلی را با استفاده از
exclude(pk=instance.pk)از فیلتر حذف کنید، در غیر این صورت ویرایش رکورد با خطای تکراری بودن مواجه میشود. - از
OneToOneFieldاستفاده نکنید مگر اینکه نیاز به رابطه یک به یک داشته باشید؛ برای جلوگیری از تکرار در سطح دیتابیس، منطق را در ویو پیادهسازی کنید.
Triggers
- جلوگیری از رکورد تکراری در ویو ست
- بررسی یکتایی فیلد در create و update
- خطای تکراری بودن هنگام put در django rest framework
- پیادهسازی شرط exists در viewset
Version History
- 94c47ca Current 2026-07-24 12:38


