مسؤول Django: كيف يمكنني إضافة حقل نموذج غير ذي صلة إلى صفحة تغيير/إضافة نموذج؟

StackOverflow https://stackoverflow.com/questions/2853362

  •  27-09-2019
  •  | 
  •  

سؤال

لدي النماذج التالية:

class Foo(models.Model):
    field1 = models.IntegerField()
    ...

class Bar(models.Model):
    field1 = models.IntegerField()
    ...

class Foo_bar(models.Model):
    foo = models.ForeignKey(Foo)
    bar = models.ForeignKey(Bar)
    ...

في المسؤول ، أريد ذلك حتى في صفحة تغيير/إضافة FOO ، يمكنك تحديد كائن شريط ، وعلى حفظ ، أريد إنشاء كائن FOO_BAR لتمثيل العلاقة. كيف يمكنني القيام بذلك من خلال تخصيص موقع المسؤول/modeladmins؟ لاحظ أن الإضافية ليست ما أحتاجه تمامًا لأنه لا توجد علاقة مفتاح خارجي صريح بين Foo و Bar. وثانياً ، لا أريد فعلاً تحرير الكائنات الشريطية ، أريد فقط الاختيار من بينها من بين تلك الموجودة في النظام.

شكرًا.

هل كانت مفيدة؟

المحلول

هل أنت متأكد أنك لا تريد فقط Manytomanyfield؟ في المسؤول ، من شأن هذا أن يظهر كقائمة متعددة الاختيار من Bar أشياء. انظر إلى جزء اختيار المجموعة من المسؤول User.

إذا كنت بحاجة إلى بيانات إضافية متصلة بالعلاقة ، فيمكنك إستخدم through معامل:

class Foo(models.Model):
    field1 = models.IntegerField()
    bars = models.ManyToManyField("Bar", related_name="foos", through="Foo_bar")

ستحتاج إلى إضافة FOO_BAR إلى المسؤول لتحرير هذه المعلمات الإضافية في المسؤول.

نصائح أخرى

أستطيع أن أفكر في احتمالين:

  1. يمكنك إنشاء نموذج مخصص لك Foo نموذج وإضافة حقل يحتوي على Bar.objects.all() QuerySet لذلك. ثم تجاوز التخلف عن السداد save_form() طريقة لإنشاء جديد Bar مثيل عند حفظ الكائن.

  2. يمكنك إنشاء فئة حقل مخصصة وإضافتها إليك Foo النموذج ، والفئة هذه الوظيفة من خلال إشارة ´post_save` ...

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top