【发布时间】:2023-03-26 04:04:01
【问题描述】:
我想在从视图中的模型创建的表单中隐藏外键字段。 这是模型:
class Order(models.Model):
class Meta:
ordering = ['unity_price']
item = models.ForeignKey(Item, on_delete=models.CASCADE)
user = models.ForeignKey(authModels.User, on_delete=models.CASCADE, default=1)
order_quantity = models.IntegerField(default=0)
unity_price = models.FloatField(default=0)
end_validity_date = models.DateTimeField(default=timezone.now() + datetime.timedelta(days=30))
is_sell = models.BooleanField(default=True)
def __str__(self):
if self.is_sell:
return 'sell ' + str(self.order_quantity) + ' ' + self.item.item_text + ' at ' + str(self.unity_price)
return 'buy ' + str(self.order_quantity) + ' ' + self.item.item_text + ' at ' + str(self.unity_price)
这是表格:
from .models import Order
class OrderForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(OrderForm, self).__init__(*args, **kwargs)
self.fields['user'].widget = HiddenInput()
self.fields['item'].widget = HiddenInput()
class Meta:
model = Order
fields = ('item', 'user', 'order_quantity', 'unity_price', 'end_validity_date', 'is_sell',)
这是视图:
class DetailView(FormMixin, generic.DetailView):
model = Item
template_name = 'bourse/detail.html'
form_class = OrderForm
def get_success_url(self):
return reverse('bourse:detail', kwargs={'pk': self.object.id})
def get_context_data(self, **kwargs):
context = super(DetailView, self).get_context_data(**kwargs)
context['form'] = OrderForm(initial={'post': self.object})
return context
def post(self, request, *args, **kwargs):
self.object = self.get_object()
form = self.get_form()
form.fields['item'].initial = self.get_object()
if form.is_valid():
return self.form_valid(form)
else:
return self.form_invalid(form)
def form_valid(self, form):
model_instance = form.save(commit=False)
model_instance.user = self.request.user
model_instance.item = self.get_object()
print (model_instance.item)
model_instance.save()
return super(DetailView, self).form_valid(form)
它适用于字段“用户”,但不适用于字段“项目”。我不知道在 model_instance.item (应该是当前视图显示的对象)或 form.fields['item'].initial (也应该是当前视图的对象)中放入什么。
问候,
【问题讨论】:
标签: django forms foreign-keys