Python Django моделийн зөв хэрэглээ

1. Модэл зөв нэрлэх

Моделийн нэрийг аль болох ганц тоогоор нэрлэх хэрэгтэй жнь: Article , Post , User г.м. Нэг ширхэг модел олон объектийн талаарх мэдээлэл агуулахгүй шүү дээ.

2. Relationship талбаруудыг нэрлэх

ForeignKey , OneToOneKey , ManyToMany зэрэг relation үүсгэхдээ утгатай нэршил ашиглах хэрэгтэй. Жнь Article модел нь User моделтэй ForeignKey relation үүсгэсэн гэж үзэе. Хэрвээ энэ талбар нь тухай Article -ын нийтлэлч бол зүгээр user гэснээс author гэсэн нь илүү утга төгөлдөр, албан ёсны болж байна.

3. Related-name зөв нэрлэх

related_name -ыг өгөхдөө олон тоон дээр бичиж сурах хэрэгтэй, учир нь тухай queryset утга буцаж ирж байгаа шүү дээ.

class Zohiolch(models.Model):
pass
class Nom(models.Model):
zohiolch = models.ForeignKey(Zohiolch, related_name='nomnuud')

4. ForeignKey ашиглахдаа unique=True ашиглаж болохгүй

ForeignKey -ыг unique=True -тэй бичих шаардлага байхгүй. Үнэхээр шаардлагатай гэж үзвэл OneToOneField гэж байгааг санах хэрэгтэй.

5. Attribute болон method функцын дараалал

  • constants утгууд (choices г.м)
  • моделийн талбарууд
  • manager
  • meta
  • def __unicode__(python2) эсвэл def __str__(python3)
  • бусад онцгой method функцууд
  • def clean
  • def save
  • def get_absolute_url
  • бусад функцууд

6. Моделийг migration -ээр нэмэх хэрэгтэй

Үргэлж makemigration, migrate -ийг ашиглах хэрэгтэй. 1.6 -аас өмнөх хувилбарууд South ашиглана уу.

7. BooleanField

BooleanFieldnull=True , blank=True ашиглах нь утгагүй хэрэг. Үнэхээр null байх хэрэгтэй бол NullBooleanField гэж бий.

8.ModelForm-д талбарыг дахин тодорхойлох

Моделийн талбаруудыг ModelForm эсвэл ModelSerializer-д дахин тодорхойлж болохгүй. Хэрвээ формд ашиглагдах талбаруудыг бүгдийг нь тодорхойлж бичих бол MetaFields ашиглах хэрэгтэй. Хэрвээ талбарыг өөрчлөхгүй, зөвхөн widget нэмэх хэрэгтэй бол Meta доторх widgets -ыг ашигла.

9. ObjectDoesNotExist -ыг бүү ашигла

ObjectDoesNotExist -ын оронд ModelНэр.DoesNotExist ашиглах нь илүү онцгойлсон үйлдэл тул цаашид үүнийг ашиглаж занших хэрэгтэй.

User.DoesNotExist г.м

10. all() -ыг зөвхөн хэрэгтэй үедээ ашигла

ORM ашиглаж байгаа л бол filter() , count() зэргийн өмнө .all() дуудах шаардлагагүй.

11. help_text -ыг documentation болгон ашигла

талбарын тайлбар, түүний тухай help_text ашиглан бичих нь өөрт болоод бусад admin эрхтэй хүмүүст ойлгомжтой байх болно.

12. Мөнгө, дүнг хадгалах

Мөнгөн дүнг хадгалахдаа FloatField биш DecimalField ашиглах хэрэгтэй. Ингэснээр cent зэрэг бутархай тоог арай илүү бодит дүн болгож хадгална.

13. Хэрэглэгч upload хийж буй файлуудыг нэг фолдерт хийхээс зайлсхийх

1 хавтсанд олон файл хадгалана гэдэг нь хайх үйл явц удаан болно гэсэн үг. Үүнээс зайлсхийхийн тулд дараах аргыг ашиглаж болно.

def get_upload_path(instance, filename):
return os.path.join('user/profile_pic/', now().date().strftime("%Y/%m/%d"), filename)

class User(models.Model):
avatar = models.ImageField(blank=True, upload_to=get_upload_path)
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.