встроенное динамическое значение модели django по умолчанию для foreignKey - PullRequest
2 голосов
/ 22 февраля 2011

У меня есть эти 3 модели в models.py

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

class Agent(django.contrib.auth.models.User):
    regions = models.CharField(max_length=50, choices={...})
    ....

class Payment(models.Model):
    added_by = models.ForeignKey(Agent)
    customer = models.ForeignKey(Customer)
    date = models.DateField(default=datetime.date.today())
    amount = models.IntegerField(default=0)

, а также в моем admin.py, у меня есть эти классы:

class PaymentInline(admin.TabularInline):
     model = Payment
     extra = 0

class CustomerAdmin(admin.ModelAdmin):
    inlines = [PaymentInline,]

Вопрос № 1: Возможно ли предварительно установить поле «агент» для текущего зарегистрированного Агента в «PaymentInline» на странице изменения клиента. мы можем предварительно установить значение для поля агента, так же, как django делает для поля «Клиент», которое уже скрыто от встроенного.

Вопрос № 2: или есть способ создать ссылку, где customer_id и agent_id жестко закодированы в URL; и на странице добавления платежа мы могли бы иметь значения по умолчанию и не редактируемые значения для поля клиента и поля агента например, этот URL [1] будет связывать нас с обычной страницей добавления, но с полями customer_field и agent_feild установлены Agent.objects.get (id = 1) и Customer.objects.get (id = 1). (Или мы можем скрыть эти 2 поля, так как они все равно не редактируются)

[1] * * +1011

Есть мысли?

Спасибо

Макс

Ответы [ 2 ]

3 голосов
/ 12 апреля 2011

TabularInline - это InlineModelAdmin, поэтому давайте определим formfield_for_foreignkey ():

class PaymentInline(admin.TabularInline):
    def formfield_for_foreignkey(self, db_field, request, **kwargs):
        if db_field.name == 'added_by':
            kwargs['initial'] = request.user.id
            return db_field.formfield(**kwargs)
        return super(MyModelAdmin, self).formfield_for_foreignkey(
            db_field, request, **kwargs
        )
1 голос
/ 07 марта 2011

1: Я полагаю, что нужно отредактировать встроенный шаблон, скрыть столбец «Агент» и установить его по умолчанию для зарегистрированного пользователя. Q2: GET аргументы передаются в форму по умолчанию. Если вы хотите сделать некоторые поля нередактируемыми, я думаю, вам нужно изменить шаблон, чтобы проверить наличие этих аргументов, а затем скрыть поля (или нет). В качестве альтернативы вы можете передать другую форму представлению ModelAdmin (также после проверки наличия опций GET).

Tomus

...