2015-04-24 6 views
0

У меня есть модель «Компания», имеющая много разных взаимоотношений со страной и городом, в то время как у страны и города есть друг к другу отношения между ними. Проблема заключается в том, что при загрузке «предприятия» приходится выбирать страны, в которых они работают, а также города, которые они обслуживают, но список городов очень длинный, а также все города смешаны, не различая, в какой стране вы находитесь. Я хотел бы группировать города по странам.Группа ManyToMany в Django admin

Это именно то, что django-smart-selects, только этот плагин не работает во многих отношениях. Кто-то может помочь мне адаптировать этот плагин для работы со многими или многими отношениями или комментировать меня, если они думают о другой альтернативе.

спасибо!

class Company(models.Model): 
    name = models.CharField(max_length=255) 
    countries = models.ManyToManyField(Country) 
    cities = models.ManyToManyField(City) 

class Country(models.Model): 
    name = models.CharField(max_length=255) 

class City(models.Model): 
    name = models.CharField(max_length=255) 
    country = models.ForeignKey(Country) 

ответ

0

Вот решение, как можно решить эту проблему в админ с smart_selects:

Определить с помощью модели для ваших отношений manytomany (компании города). В сквозной модели вы определяете отношение к городу как GroupedForeignKey. Затем вы создаете встроенную в админ для своей Континента с помощью сквозной модели.

class Country(models.Model): 
    name=models.CharField(max_length=50) 

class City(models.Model): 
    name=models.CharField(max_length=50) 
    country=models.ForeignKey(Country) 

class CCRel(models.Model): 
    city= GroupedForeignKey(City, "country") 
    company = models.ForeignKey("Company") 

class Company(models.Model): 
    name=models.CharField(max_length=50) 
    country = models.ManyToManyField(Country,through="CCRel") 

И admin.py:

class CInline(admin.TabularInline): 
    model = CCRel 
class CAdmin(admin.ModelAdmin): 
    inlines=[CInline] 
admin.site.register(Company,CAdmin) 

Он должен также работать с ChainedForeignKey аналогичным образом.

Вы должны удалить поле страны из модели Компании, поскольку это является избыточным.

+0

Большое спасибо за ваш ответ, просто чтобы попробовать это бросает мне следующую ошибку: companies.Company.countries: (fields.E331) поле определяет многие-ко-многим т hrough модели «» CCRel , который не был установлен. Я следовал за шагами и не понимаю, в чем проблема. Надеюсь, ты поможешь мне. привет –

+0

Вы синхронизировали/переносили базу данных после добавления модели CCRel? –

+0

, если я удалю файл из базы данных и снова выполнил миграцию. –

Смежные вопросы