में एक इनलाइन प्रपत्र तर्क मॉडल की है में चुनिंदा में विकल्प है:सीमा विदेशी कुंजी व्यवस्थापक
- एक
Building
है कईRooms
- एक
Room
उदाहरण के लिए, एक औरRoom
(एक कोठरी के अंदर हो सकता है --ForeignKey 'स्वयं') पर - एक
Room
केवल एक ही इमारत में एक औरRoom
अंदर हो सकता है (इस मुश्किल हिस्सा है)
यहाँ कोड मैं है:
#spaces/models.py
from django.db import models
class Building(models.Model):
name=models.CharField(max_length=32)
def __unicode__(self):
return self.name
class Room(models.Model):
number=models.CharField(max_length=8)
building=models.ForeignKey(Building)
inside_room=models.ForeignKey('self',blank=True,null=True)
def __unicode__(self):
return self.number
और:
#spaces/admin.py
from ex.spaces.models import Building, Room
from django.contrib import admin
class RoomAdmin(admin.ModelAdmin):
pass
class RoomInline(admin.TabularInline):
model = Room
extra = 2
class BuildingAdmin(admin.ModelAdmin):
inlines=[RoomInline]
admin.site.register(Building, BuildingAdmin)
admin.site.register(Room)
इनलाइन वर्तमान इमारत में केवल कमरे प्रदर्शित करेगा (जो मैं क्या चाहते हैं)। समस्या यह है कि inside_room
ड्रॉप डाउन के लिए, यह कमरे की मेज (अन्य इमारतों में शामिल) के सभी कमरों को प्रदर्शित करता है।
rooms
की इनलाइन में, मैं जो वर्तमान building
(इमारत रिकॉर्ड वर्तमान में मुख्य BuildingAdmin
रूप से परिवर्तन किया जा रहा) में हैं केवल rooms
को inside_room
विकल्पों को सीमित करने की जरूरत है।
मैं मॉडल में limit_choices_to
के साथ ऐसा करने का कोई तरीका नहीं समझ सकता, और न ही मैं यह समझ सकता हूं कि व्यवस्थापक के इनलाइन फॉर्मेट को ठीक से कैसे ओवरराइड करना है (मुझे लगता है कि मुझे किसी भी तरह से कस्टम इनलाइन फॉर्म बनाना चाहिए , मुख्य रूप के build_id को कस्टम इनलाइन पर पास करें, फिर उसके आधार पर फ़ील्ड के विकल्पों के लिए क्वेरीसेट को सीमित करें - लेकिन मैं अपने सिर को लपेट नहीं सकता कि यह कैसे करें)।
हो सकता है कि इस व्यवस्थापक साइट के लिए बहुत जटिल है, लेकिन यह कुछ ऐसा है जो आम तौर पर उपयोगी होगा की तरह लगता है ...
इस अधिकार ने मुझे बहुत परेशानी बचाई। मुझे विकल्पों को फ़िल्टर करने की आवश्यकता थी, लेकिन एक सत्र चर द्वारा। यह जवाब मुझे कोड की 5 लाइनों के साथ करने देता है। धन्यवाद। –
धन्यवाद दस लाख! वैकल्पिक विकल्प डॉक्स के अनुसार सुपर कॉल करने से पहले kwargs ['queryset'] असाइन करना है: https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.formfield_for_foreignkey – powlo
यह कोड ने मुझे समय के टन भी बचाया। इस – fangsterr