簡體   English   中英

Django ModelFormset名稱而不是外鍵字段中的ID

[英]Django ModelFormset name instead of ID in foreign key field

可以這么說,我對modelformset自定義字段有疑問。 到目前為止,這是代碼,它可以正常工作:

models.py:

class Workplace(models.Model):
    user = models.ForeignKey(User)
    description = models.TextField(blank=True, null=True)
    organization = models.ForeignKey(Organization)
    position = models.CharField(max_length=250, null=True)
    start = models.DateTimeField(null=True, blank=True)
    end = models.DateTimeField(null=True, blank=True)
    place = models.ForeignKey(Place, null=True, blank=True)
    deleted = models.BooleanField(default=False)

forms.py:

class UserWorkplaceForm(forms.ModelForm):
    class Meta:
        model = Workplace
        labels = {
            'deleted': 'Delete this position'
        }

    def __init__(self, *args, **kwargs):
        super(UserWorkplaceForm, self).__init__(*args, **kwargs)
        self.fields['position'].required = True
        self.fields['organization'].required = True
        self.fields['start'].required = True

views.py:

def settings_workplace(request):
    workplace_formset = modelformset_factory(Workplace,
                                         form=UserWorkplaceForm,
                                         fields=('user', 'position', 'organization', 'start', 'end', 'deleted'),
                                         widgets={'user': forms.HiddenInput(),
                                                  'start': forms.DateInput(attrs={'class': 'workplace-date'}),
                                                  'end': forms.DateInput(attrs={'class': 'workplace-date'}),
                                                  'deleted': forms.CheckboxInput(),
                                                  'organization': forms.TextInput()
                                                  },
                                         extra=0)
    if request.method == "POST":
        formset = workplace_formset(request.POST)
        if formset.is_valid():
            formset.save()
            formset = workplace_formset(queryset=request.user.get_profile().workplace.filter(deleted=False))
    else:
        formset = workplace_formset(queryset=request.user.get_profile().workplace.filter(deleted=False))

    context = {
        'formset': formset
    }

    return render_to_response('accounts/settings_workplaces.html', context, RequestContext(request))

“組織”字段呈現為Select HTML元素。 我不能擁有它,因為數據庫中有成千上萬的組織。 我想做的是將“組織”顯示為文本字段。 這就是我在小部件部分所做的。 但是,這給了我該字段的ID,通常不是名稱。 有辦法讓我兩者兼得嗎? 我需要一個更好的顯示名稱,並且需要ID(以防在其他字段上進行編輯),因為該字段是必需的。

有任何想法嗎?

您能否將其第一個值為組織ID,第二個值為組織的人類可讀名稱作為ChoiceField 這是我處理這種情況的建議。 這是在Django中設置“選擇”的文檔:

https://docs.djangoproject.com/zh-CN/1.7/ref/forms/fields/#choicefield

https://docs.djangoproject.com/zh-CN/1.7/ref/models/fields/#choices

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM