اذهب إلى المحتوى

السؤال

نشر

هل هناك طريقة لتعريف حقلين على أنهما فريدان unique  في جانغو Django؟

لدي جدول المنشورات ولا أريد أن تتكرر قيمة الحقل feild1 و الحقل feild2 معًا، أي أن قيمة الحقل الأول يمكن أن تتكرر وقيمة الحقل الثاني كذلك، لكن لا يمكن لصفين في الجدول أن يكون لها نفس قيم الحقلين معًا.

class Post(models.Model):
    id = models.AutoField(primary_key=True)
    field1 = models.CharField(max_length=150)
    field2 = models.CharField(max_length=150)

ويجب أن يكون الجدول في قاعدة البيانات في النهاية كالتالي:

id	| feild1		| feild2
1	| 1			| 55
2	| 1			| 66
3	| 2			| 55	<<<
4	| 2			| 55	<<< لا يمكن أن يكون هناك صفين لهما نفس قيم الحقلين معًا (2 و 55)

حاولت وضع unique = True كسمة في الحقولshort_link_id و post_slug لكنها لا تعمل.

 

Recommended Posts

  • 0
نشر (معدل)

يمكنك تحقيق ذلك بإستخدام unique_together

فبعد تعريف الموديل يمكنك إستخدام الunique_together لجعل حقلين نادرين , كما في المثال التالي

class Post(models.Model):
    id = models.AutoField(primary_key=True)
    field1 = models.CharField(max_length=150)
    field2 = models.CharField(max_length=150)
    class Meta:
      unique_together=('field1','field2')

بذلك الشكل لقد قمنا بجعل الحقلين field1, field2 بمثابة حقل مركب نادر

تم التعديل في بواسطة شرف الدين2
اخطاء املائية
  • 0
نشر

يمكنك أيضاً  استخدام ميزات القيود UniqueConstraint وهو خيار أفضل من unique_together، لأنه يوفر لك خيارات أكثر + سيتم إلغاءه في الإصدارات القادمة من جانغو (المصدر "التوثيق الرسمي للمكتبة"). مثال:

class Volume(models.Model):
    id = models.AutoField(primary_key=True)
    short_link_id = models.ForeignKey(_id, db_column='jid', null=True, verbose_name="_id")
    post_slug = models.CharField('post_slug', max_length=100)
    comments = models.TextField('Comments', max_length=4000, blank=True)
    class Meta:
        constraints = [
            models.UniqueConstraint(fields=['short_link_id', 'post_slug '], name='name of constraint')
        ]

أو يمكنك استخدام unique_together كما تمت الإشارة إليه في الإجابة السابقة:

# مثال
class MyModel(models.Model):
  field1 = models.CharField(max_length=50)
  field2 = models.CharField(max_length=50)
  class Meta:
    unique_together = ('field1', 'field2',)
# في حالتك
class Volume(models.Model):
  id = models.AutoField(primary_key=True)
  short_link_id = models.ForeignKey(_id, db_column='jid', null=True, verbose_name = "id")
  post_slug = models.CharField('postslug', max_length=100)
  comments = models.TextField('Comments', max_length=4000, blank=True)
  class Meta:
    unique_together = ('short_link_id', 'post_slug',)

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...