![](/img/trans.png)
[英]How to change in Django Admin the default form (dropdown list) for a foreignKey model?
[英]how to change form field from dropdown list to radio button in django if the options in dropdown are being inherited from another model?
我正在開發一個應用程序,我可以從下拉列表中選擇 select 項目並購買它們。 我有一個表單字段,它是一個下拉列表(項目通過外鍵連接到其他 model。我想讓這些選項顯示為單選按鈕而不是下拉列表
我的模型.py
class Plans(models.Model):
plan_name = models.CharField(max_length=50)
speed = models.IntegerField()
price = models.FloatField()
def __str__(self):
return self.plan_name
def get_deadline():
return dt.today() + timedelta(days=30)
class Orders(models.Model):
user = models.ForeignKey(CustomUser, primary_key=True, on_delete = models.CASCADE)
pack = models.ForeignKey(Plans, on_delete = models.CASCADE)
start_date = models.DateField(auto_now_add=True)
end_date = models.DateField(default=get_deadline())
is_active = models.BooleanField(default=True)
def __str__(self):
name = str(self.user.username)
return name
def get_absolute_url(self):
return reverse('home-home')
我的 forms.py (我嘗試使用 init 方法但是當我使用它時我的下拉列表消失了)
class BuyPlanForm(forms.ModelForm):
error_css_class = 'error-field'
required_css_class = 'required-field'
class Meta():
model = Orders
fields = ['pack']
#def __init__(self, *args, **kwargs):
# super(BuyPlanForm, self).__init__(*args, **kwargs)
# for field in self.fields.values():
# if isinstance(field.widget, forms.Select):
# field.widget = forms.RadioSelect()
我的觀點.py
class UserBuyPlan(LoginRequiredMixin, CreateView):
template_name = 'plans/plan.html'
form_class = BuyPlanForm
def form_valid(self, form):
form.instance.user = self.request.user
return super().form_valid(form)
你可以在你的模板中嘗試這樣的事情:
{% for plan in order.plan_set.all %}
<input type="radio" name="plan" id="choice{{ forloop.counter }}" value="{{ plan.id }}">
<label for="plan{{ forloop.counter }}">{{ plan.choice_text }}</label><br>
{% endfor %}
有關更多信息,請查看https://docs.djangoproject.com/en/4.0/intro/tutorial01/ ,我從那里修改了這段代碼
因此,請嘗試以您的形式執行此操作:
class BuyPlanForm(forms.Form):
park = forms.MultipleChoiceField(
widget=forms.CheckboxSelectMultiple,
choices = Orders.pack,
label = 'pack'
)
刪除forms.ModelForm並將其替換為forms.Form並管理視圖中的添加。
告訴我它是否有效。 謝謝
所以我不得不將小部件添加到我的表單字段 >>> pack = forms.ModelChoiceField(Plans.objects.all(), widget=forms.RadioSelect())
所以我的完整表格 class 看起來像
class BuyPlanForm(forms.ModelForm):
error_css_class = 'error-field'
required_css_class = 'required-field'
pack = forms.ModelChoiceField(Plans.objects.all(), widget=forms.RadioSelect())
class Meta():
model = Orders
fields = ['pack']
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.