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

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

Amer Abdallah

السؤال

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

  • إعلانات

  • تابعنا على



×
×
  • أضف...