• 1

كيفية تحديد حقلين كـ "unique" معًا في جانغو Django؟

هل هناك طريقة لتعريف حقلين على أنهما فريدان 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 لكنها لا تعمل.

 

1 شخص أعجب بهذا

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية
  • 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',)

 

انشر على الشّبكات الاجتماعية


رابط هذه المساهمة
شارك على الشبكات الإجتماعية

يجب أن تكون عضوًا لدينا لتتمكّن من التعليق

انشاء حساب جديد

يستغرق التسجيل بضع ثوان فقط


سجّل حسابًا جديدًا

تسجيل الدخول

تملك حسابا مسجّلا بالفعل؟


سجّل دخولك الآن