AutoSkill پیاده‌سازی منطق یکتایی در متدهای create و update جنگو

این مهارت برای ایجاد یک ViewSet سفارشی در Django REST Framework استفاده می‌شود که از ایجاد رکوردهای تکراری بر اساس یک فیلد خاص جلوگیری کرده و اجازه ویرایش رکورد فعلی را بدون خطای تکراری بودن می‌دهد.

install
source · Clone the upstream repo
git clone https://github.com/ECNU-ICALK/AutoSkill
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/ECNU-ICALK/AutoSkill "$T" && mkdir -p ~/.claude/skills && cp -r "$T/SkillBank/ConvSkill/Persian/پیاده-سازی-منطق-یکتایی-در-متدهای-create-و-update-جنگو" ~/.claude/skills/ecnu-icalk-autoskill-create-update && rm -rf "$T"
manifest: SkillBank/ConvSkill/Persian/پیاده-سازی-منطق-یکتایی-در-متدهای-create-و-update-جنگو/SKILL.md
source content

پیاده‌سازی منطق یکتایی در متدهای create و update جنگو

این مهارت برای ایجاد یک ViewSet سفارشی در Django REST Framework استفاده می‌شود که از ایجاد رکوردهای تکراری بر اساس یک فیلد خاص جلوگیری کرده و اجازه ویرایش رکورد فعلی را بدون خطای تکراری بودن می‌دهد.

Prompt

Role & Objective

شما یک توسعه‌دهنده Django REST Framework هستید. هدف شما پیاده‌سازی یک ModelViewSet است که محدودیت یکتایی (Uniqueness) را برای یک فیلد خاص (مانند user_id) به صورت دستی در متدهای create و update مدیریت می‌کند.

Operational Rules & Constraints

  1. متد create: این متد را بازنویسی (Override) کنید. قبل از ذخیره، بررسی کنید که آیا رکوردی با مقدار فیلد خاص وجود دارد یا خیر (
    Model.objects.filter(field=value).exists()
    ). اگر وجود داشت، پاسخ خطای 400 Bad Request برگردانید. در غیر این صورت، رکورد را ذخیره کرده و پاسخ 201 Created ارسال کنید.
  2. متد update: این متد را بازنویسی کنید. نمونه فعلی را با
    self.get_object()
    دریافت کنید. برای بررسی تکراری بودن، از
    Model.objects.filter(field=value).exclude(pk=instance.pk).exists()
    استفاده کنید تا رکورد فعلی از بررسی حذف شود. اگر رکورد تکراری دیگری وجود داشت، پاسخ 400 برگردانید. در غیر این صورت، به‌روزرسانی را انجام داده و پاسخ 200 OK ارسال کنید.
  3. کدهای وضعیت: از
    status.HTTP_201_CREATED
    برای ایجاد موفق،
    status.HTTP_200_OK
    برای به‌روزرسانی موفق و
    status.HTTP_400_BAD_REQUEST
    برای خطاهای اعتبارسنجی استفاده کنید.
  4. مدیریت 404: به متد
    get_object()
    اجازه دهید خطای 404 Not Found را به صورت خودکار در صورت عدم یافتن رکورد مدیریت کند.

Anti-Patterns

  • در متد update فراموش نکنید که رکورد فعلی را با استفاده از
    exclude(pk=instance.pk)
    از فیلتر حذف کنید، در غیر این صورت ویرایش رکورد با خطای تکراری بودن مواجه می‌شود.
  • از
    OneToOneField
    استفاده نکنید مگر اینکه نیاز به رابطه یک به یک داشته باشید؛ برای جلوگیری از تکرار در سطح دیتابیس، منطق را در ویو پیاده‌سازی کنید.

Triggers

  • جلوگیری از رکورد تکراری در ویو ست
  • بررسی یکتایی فیلد در create و update
  • خطای تکراری بودن هنگام put در django rest framework
  • پیاده‌سازی شرط exists در viewset