Trim
继承的和Car
的TrimType
,TrimType
继承的Car
。
Trim
在特定详细信息页面上创建时Car
,我想trimType
通过Car
.
我提到了How to use the request in a ModelForm in Django。
我的模板/品牌/trim_update.html是:
# trim_update.html
{% extends 'base.html' %}
{% block content %}
<div class="container">
<h5 class="my-3 border-bottom pb-2">New Trim</h5>
<form method="post" class="post-form my-3" enctype="multipart/form-data">
{% csrf_token %}
{{ form.as_p }}
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
{% endblock %}
和品牌/models.py是:
# models.py
class Car(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=200, null=False, blank=False)
image = models.ImageField(default=None, null=True, upload_to='car/%Y/%m/%d/')
order = models.IntegerField(default=0)
def __str__(self):
return self.name
class TrimType(models.Model):
car = models.ForeignKey(Car, on_delete=models.SET_NULL, blank=True, null=True)
typeName = models.CharField(max_length=50, blank=False, ull=False)
def __str__(self):
return self.typeName
class Trim(models.Model):
id = models.AutoField(primary_key=True)
order = models.IntegerField(default=0)
trimType = models.ForeignKey(TrimType, on_delete=models.SET_NULL, null=True, blank=True)
car = models.ForeignKey('Car', on_delete=models.SET_NULL, null=True)
name = models.CharField(max_length=256, default='')
price = models.IntegerField(default=0)
image = models.ImageField(default=None, blank=True, null=True, upload_to='trim/%Y/%m/%d/')
def __str__(self):
if self is not None and self.car is not None:
return self.car.name +'-'+self.name
else: return ''
和brand/views/base_views.py是:
# base_views.py
def trim_create(request, car_id):
if request.method == 'POST':
car = get_object_or_404(Car, pk=car_id)
form = TrimForm(request.POST, request.FILES, request=request)
form.fields['trimType'].queryset = TrimType.objects.filter(car_id=car_id)
if form.is_valid():
trim = form.save(commit=False)
trim.car = car
trim.image = form.cleaned_data['image']
trim.save()
return redirect('brand:car_detail', car_id=car_id)
else:
form = TrimForm()
context = {'form': form}
return render(request, 'brand/trim_update.html', context)
和brand/forms/CarForms.py是:
# CarForms.py
class TrimForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
self.request = kwargs.pop('request')
super(TrimForm, self).__init__(*args, **kwargs)
self.fields['trimType'].queryset = TrimType.objects.filter(car=self.request.car)
class Meta:
model = Trim
fields = ('id', 'name', 'price', 'order', 'trimType', 'image')
image = forms.ImageField()
name = forms.CharField(required=True)
trimType = forms.ModelChoiceField(queryset=TrimType.objects.all())
price = forms.IntegerField(required=True)
order = forms.IntegerField(required=True)
但是, CarForms.py中出现以下错误:
self.request = kwargs.pop('request')
键错误:“请求”