Как ограничить выпадающий в админке Django - PullRequest
1 голос
/ 16 ноября 2010
class A(models.Model):
    foreign = models.ForeignKey(B, unique=True)

У меня есть код выше - как я могу убедиться, что в раскрывающемся списке «Администратор А» для «чужой» мне предлагаются только уникальные варианты?Это просто для того, чтобы пользователь не нарушал ограничение уникальности и не появлялся с сообщением об ошибке администратора.

1 Ответ

0 голосов
/ 16 ноября 2010

Пожалуйста, посмотрите на ModelAdmin.formfield_for_foreignkey () здесь .Недостатком является то, что приходится прибегать к raw SQL .

class AModelAdmin(admin.ModelAdmin):
def formfield_for_foreignkey(self, db_field, request, **kwargs):
    if db_field.name == "foreign":
        kwargs["queryset"] = B.objects.raw('SELECT * FROM myapp_a where not exists (select id from myapp_b where b.id=a.foreign_id')
    return super(AModelAdmin, self).formfield_for_foreignkey(db_field, request, **kwargs)

ИМХО "ненулевые непустые уникальные FKs" выглядит как хорошая возможность переосмыслить ваше моделирование - возможно, объединение двух моделей,Каждый раз, когда я чувствовал, что слишком сильно борюсь в Джанго, я пытался сделать что-то наивное.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...