여러 인스턴스에서 사용할 수있는 장고 앱이 있습니다. 하나의 모델 (Listing)은 다양한 인스턴스에 대해 다양한 수의 필드를 가질 수 있지만 인스턴스의 추가 필드는 항상 정확히 동일합니다. 나는이 같은 관리를 통해 내가 만든 모델을 추가 한 다음 추가 필드를 원하는 :다른 레코드의 필드 내용이 레이블로 Django 템플릿에 알 수없는 필드를 표시합니다.
class BespokeField (models.Model):
name = models.CharField(
max_length = 20,
verbose_name = "Field Title"
)
def __unicode__(self):
return self.name
class Listing (models.Model):
name = models.CharField (
verbose_name = 'Listing',
max_length = 30
)
slug = models.SlugField (
verbose_name = "Slug",
allow_unicode = True,
unique=True,
blank=True,
null=True
)
class ListingBespokeField (models.Model):
bespoke_field = models.ForeignKey(BespokeField)
listing = models.ForeignKey(Listing)
value = models.CharField (
max_length = 60
)
def __unicode__(self):
return u'%s | %s' % (self.listing.name, self.bespoke_field.name)
이론은 관리자가 맞춤 필드를 지정하고이 다음이다 형태로 사용자에게 표시합니다.
class ListingBespokeFieldInline(admin.TabularInline):
model = ListingBespokeField
extra = len(BespokeField.objects.all())
max_num = len(BespokeField.objects.all())
class ListingAdmin(admin.ModelAdmin):
inlines = [ListingBespokeFieldInline]
그것은 관리자 사용자가 드롭 다운에서 각 BespokeField 중 하나를 선택하는 것을 의미하지만 않습니다 내 admin.py의 모습, 그래서 나는 사용자의 정보에 소량을 가정 할 수있는 관리자 내에서이 비교적 간단 왜냐하면 unique_together를 사용하면 각각 하나만 존재하기 때문에 불편하지 않습니다.
내가 할 수없는 방법은 관리자가 아닌 사용자에게 친절한 방법으로 이것을 제공하는 것입니다. 내가 원하는 것은 ListingBespokeField.value
에 대한 레이블로 양식에 BespokeField.name
을 표시하는 것입니다.
여기는 forms.py
(ListingBespokeField)입니다.
class ListingBespokeFieldInline(forms.ModelForm):
class Meta:
model = ListingBespokeField
exclude =['id']
widgets = {
'bespoke_field' : forms.HiddenInput(),
'value' : forms.TextInput(attrs={'class' : 'form-control'})
}
class ListingBespokeFieldForm(forms.ModelForm):
class Meta:
model = ListingBespokeField
exclude =()
BESPOKE_FIELD_COUNT = len(BespokeField.objects.all())
ListingBespokeFieldInlineFormSet = forms.inlineformset_factory (
Listing,
ListingBespokeField,
form=ListingBespokeFieldInline,
extra = BESPOKE_FIELD_COUNT,
max_num = BESPOKE_FIELD_COUNT,
exclude = ['id'],
can_delete=False,
can_order=False
)
I는 다음과 같이 템플릿을 통해 그것을 제공하기 위해 노력하고있어 :이 작동하지 않습니다
<table class="table">
{{ bespokefields.management_form }}
{% for form in bespokefields.forms %}
{% if forloop.first %}
<thead>
<tr>
{% for field in form.visible_fields %}
<th>{{ field.label|capfirst }}</th>
{% endfor %}
</tr>
</thead>
{% endif %}
<tr class="formset_row bespokefield">
<td>
{{ form.listing }}{{ form.id }}{{ form.bespoke_field }}
{{ form.bespoke_field.label }}
</td>
<td>{{ form.value }}</td>
</tr>
{% endfor %}
</table>
. 나는 약간 통찰력을 사용할 수 있었다.
<table class="table">
{{ bespokefields.management_form }}
{% for form in bespokefields.forms %}
<tr class="formset_row bespokefield">
<td>
{{ form.listing }}{{ form.id }}
<select id="id_listingbespokefield_set-{{ forloop.counter0 }}-bespoke_field" name="listingbespokefield_set-{{ forloop.counter0 }}-bespoke_field" class="form-control">
{% with forloop.counter as counter %}
{% for x,y in form.fields.bespoke_field.choices %}
{% if counter == forloop.counter0 %}
<option value="{{x}}" selected>{{y}}</option>
{% endif %}
{% endfor %}
{% endwith %}
</select>
</td>
<td>{{ form.value }}</td>
</tr>
{% endfor %}
</table>
정확히 작동하지 않는 그 무엇인가 – Jonathan
BespokeField.name을 Listing의 양식에 레이블로 표시하려면 List.ListingBespokeField 필드가 있어야합니다. 현재 'Bespoke field'가 표시됩니다. – HenryM
공개 저장소에 대한 액세스 권한을 제공 할 수 있습니까? –