My acemi kafa sadece sadece gösteri için location_unit modelinde, iki alan, konumu ve birimini sınırlamak için nasıl idrak edemezdjango'da, aynı modeldeki başka bir alana dayalı yabancıların seçimlerini nasıl sınırlandırabilirsiniz?
class unit(models.Model):
name = models.CharField(max_length=200)
class project(models.Model):
name = models.CharField(max_length=200)
class location(address):
project = models.ForeignKey(project)
class project_unit(models.Model):
project = models.ForeignKey(project)
unit = models.ForeignKey(unit)
class location_unit(models.Model):
project = models.ForeignKey(project)
#Limit the selection of locations based on which project has been selected
location = models.ForeignKey(location)
#The same here for unit. But I have no idea how.
unit = models.ForeignKey(project_unit)
(ben sadece bu gerekli alan sayısını sınırlı) bu modelleri var location_unit'te seçilen projeye başvuran seçimler. Model formunu geçersiz kılmalı ve orada bir sorgu yapmalı mıyım yoksa limit_choices_to'yu kullanabilir miyim? Her iki şekilde de denedim başarısız oldu
Düzenleme: Sadece açıklığa kavuşturmak için, bu Django Yöneticisi'nde olmasını istiyorum. Ben de formfield_for_foreignkey denedim, ama hala benim için bir hayır.
DÜZENLEME 2:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "unit":
kwargs["queryset"] = project_unit.objects.filter(project=1)
return db_field.formfield(**kwargs)
return super(location_unit_admin, self).formfield_for_foreignkey(db_field, request, **kwargs)
Yukarıdaki kod parçası çalışır. Ama elbette projenin 1'e işaret etmesini istemiyorum. Project_id modellerine nasıl başvururum? , Iyi bir yön olabilir gibi
Merhaba Eternicode, Sorunuma zaman ayırdığınız için teşekkür ederim. Ama benim bir sorum var, bu sizin dinamik kodunuz, çünkü bana bir location_unit yaratmak istediğimde, __init__ zaten çalıştırılmış ve hangi projeyi seçtiğim önemli değil, tekrar çalıştırılamayacak gibi görünüyor. Bu yüzden önce bir proje seçmem gerekiyor, daha sonra tekrar kaydedin ve daha sonra __init__'yi tekrar çalıştırmak için location_unit'i yeniden girin, sonra birimler sadece söz konusu projeye ait olanları gösterecektir. Bunu doğru şekilde anladım mı? – Brian
Belki böyle bir şey kullanılabilir: http://stackoverflow.com/questions/3750097/how-to-read-write-input-fields-in-django-admin-tabular-inlines-using-ajax ama benim fikri nasıl yönetilir – Brian
Tamam, bu tam olarak ne istediğimi yapar :) https://github.com/digi604/django-smart-selects – Brian