我在實現(可能)相當簡單的任務時遇到問題。 我有完全可修改的模型(Prodotto,Comune),它們顯示爲「可添加」字段,如下圖所示。 我不希望看到的是這些字段的+(添加)按鈕,因此要刪除這種形式的「可添加」屬性。 我試過在兩個模型中設置has_add_permission = False,但是這樣會使得不可能完全向這樣的模型添加新的對象,而不僅僅是以這種形式。Django 1.7正在刪除從內嵌表單添加按鈕
我怎麼能這樣做?
編輯:爲了澄清我的需要,我希望不要有「+」的隔壁FK模型的領域,但我仍然希望能夠增加全新的內聯。爲了儘可能清楚,正如我在評論中寫的那樣,考慮如下情景:https://code.djangoproject.com/attachment/ticket/20367/django_custom_user_admin_form.png我只需要將組和國家旁邊的「+」刪除。
現有代碼:
models.py(所涉及的具體應用的):
from django.db import models
from smart_selects.db_fields import ChainedForeignKey
from apps.comune.models import Comune, Cap
class Prodotto(models.Model):
SETTORE_CHOICES = (
('CAL', 'Accessori calzature'),
('ALI', 'Alimentari'),
('ARA', 'Arredamenti e accessori'),
('AEM', 'Auto e moto'),
('CAL', 'Calzature'),
('CEG', 'Cartaria e grafica'),
('CEP', 'Concerie e pelletterie'),
('EDI', 'Edilizia'),
('INV', 'Industrie varie'),
('IST', 'Istruzione'),
('MDC', 'Materiali da costruzione'),
('MMC', 'Metalmeccanica'),
('SEI', 'Serramenti e infissi'),
('STM', 'Strumenti musicali'),
('TEI', 'Terziario innovativo'),
('TAB', 'Tessile abbigliamento'),
('TCP', 'Trasporto cose e persone'),
('VAR', 'Vari'),
)
nome = models.CharField(max_length=100)
settore = models.CharField(max_length=40, choices=SETTORE_CHOICES)
class Meta:
verbose_name_plural = "prodotti"
verbose_name = "prodotto"
ordering = ['nome']
def __unicode__(self):
return self.nome.capitalize()
class Cliente(models.Model):
TIPOLOGIA_CHOICES = (
('AR', 'Artigiano'),
('CO', 'Commerciante'),
('GI', 'Grande impresa'),
('PI', 'Piccola impresa'),
)
FORMA_SOCIETARIA_CHOICES = (
('SNC', 'S.n.c.'),
('SRL', 'S.r.l.'),
('SPA', 'S.p.A.'),
('SAS', 'S.a.s.'),
('COOP', 'Coop.A.r.l.'),
('DI', 'D.I.'),
('SCARL', 'S.c.a.r.l.'),
('SCPA', 'S.c.p.a.'),
)
SETTORE_CHOICES = (
('CAL', 'Accessori calzature'),
('ALI', 'Alimentari'),
('ARA', 'Arredamenti e accessori'),
('AEM', 'Auto e moto'),
('CAL', 'Calzature'),
('CEG', 'Cartaria e grafica'),
('CEP', 'Concerie e pelletterie'),
('EDI', 'Edilizia'),
('INV', 'Industrie varie'),
('IST', 'Istruzione'),
('MDC', 'Materiali da costruzione'),
('MMC', 'Metalmeccanica'),
('SEI', 'Serramenti e infissi'),
('STM', 'Strumenti musicali'),
('TEI', 'Terziario innovativo'),
('TAB', 'Tessile abbigliamento'),
('TCP', 'Trasporto cose e persone'),
('VAR', 'Vari'),
)
ragione_sociale = models.CharField(max_length=200)
forma_societaria = models.CharField(
max_length=5, choices=FORMA_SOCIETARIA_CHOICES)
titolare = models.CharField(max_length=100, blank=True)
partita_iva = models.CharField(
max_length=11, verbose_name='Partita IVA', unique=True)
tipologia = models.CharField(max_length=2, choices=TIPOLOGIA_CHOICES)
settore = models.CharField(max_length=40, choices=SETTORE_CHOICES)
prodotto = models.ManyToManyField(Prodotto, blank=True)
class Meta:
verbose_name_plural = "clienti"
verbose_name = "cliente"
def __unicode__(self):
return self.ragione_sociale.capitalize()
class Sede(models.Model):
nome = models.CharField(max_length=100)
indirizzo = models.CharField(max_length=200, blank=True)
cliente = models.ForeignKey(Cliente)
comune = models.ForeignKey(Comune)
cap = ChainedForeignKey(
Cap,
chained_field="comune",
chained_model_field="comune",
show_all=False,
auto_choose=True,
)
class Meta:
verbose_name_plural = "sedi"
verbose_name = "sede"
ordering = ['nome']
def __unicode__(self):
return self.nome.capitalize() + ", " + self.indirizzo
admin.py(所涉及的具體應用的):
from django.contrib import admin
from .models import Cliente, Prodotto, Sede
from apps.recapito.models import RecapitoCliente
class SedeInline(admin.TabularInline):
model = Sede
extra = 1
def provincia(self, obj):
return obj.comune.provincia
readonly_fields = ['provincia', ]
class RecapitoInline(admin.TabularInline):
model = RecapitoCliente
extra = 1
list_fields = ['cliente', 'tipo', 'recapito', ]
@admin.register(Cliente)
class ClienteAdmin(admin.ModelAdmin):
list_display = [
'ragione_sociale', 'forma_societaria', 'titolare', 'partita_iva', ]
list_filter = ['forma_societaria', ]
search_fields = ['ragione_sociale', ]
inlines = [RecapitoInline, SedeInline]
admin.site.register(Prodotto)
此應用程序的管理界面produc ES這樣的:
快捷方式鏈接1和2是我需要刪除的那些,被稱作列(FKS)內我在線課程。 快捷鏈接3和4將被保留,因爲它們自己提及內聯。
這對我工作在1.8.3。比公認的答案imho好得多。 – jenniwren 2016-08-30 22:14:33
也適用於1.9.8。我想一個最小的例子(基於上面)將是:'formset.form.base_fields ['my_field']。widget.can_add_related = False(在調用super和return之間) – Dennis 2017-06-02 13:41:04