如何重写更新视图get_queryset django

yuvru6vn  于 2023-01-27  发布在  Go
关注(0)|答案(1)|浏览(177)

我是django的新手,我正在尝试制作一个简单的更新表单,您可以在其中输入要修改的对象的PK,并在同一个表单中修改对象的字段,而不是通过url输入pk,而是从以前通过url http://127.0.0.1:8001/update/打开的表单中输入PK,我正在使用UpdateView,并尝试取消get_queryset方法,到目前为止,我已经实现了取消方法并打开窗体,但我必须传递一个pk,否则它不会打开,我不知道如何使窗体打开为空。

    • 型号:**
class Lote(models.Model):
  lote = models.CharField(verbose_name='Lote', max_length=10, primary_key=True)
  codigo = models.CharField(verbose_name='Codigo', max_length=10, blank=True, null=True)   
  producto = models.CharField(blank=True, max_length=50, null=True, verbose_name='Producto')
  timestamp=  models.DateTimeField(auto_now_add=True)
    • 表格:**
class LoteForm(forms.ModelForm):    
    class Meta:
        model = Lote
        fields = ["lote","producto","codigo"]

class LoteFormView(forms.Form):
    lote = forms.CharField(max_length=20)
    producto = forms.CharField(max_length=20)
    codigo = forms.CharField(max_length=20) 

View:

class Update(UpdateView):
   model = Lote
   template_name = 'lote/updateview.html'
   fields = ['lote', 'codigo', 'producto']
   success_url = '/update/'

   def get_object(self, queryset=None):
        return Lote.objects.get(pk=11111)
    • 网址:**
url(r'^update/$', Update.as_view(), name='update'),
    • 结果:**

enter image description here

    • 我想要的**

enter image description here
我希望打开空白表单,然后将Lote(pk)传递给它,并且能够更新其他字段并重定向到空白表单
感谢您的帮助和关注

qxgroojn

qxgroojn1#

我得到的答案是

def updates_lote(request):
if request.method == 'POST':
    form = UpdatesLoteForm(request.POST)
    if form.is_valid():
        lote = form.cleaned_data['lote']
        serial = form.cleaned_data['serial']
        obj = Lote.objects.get(lote=lote)
        obj.serial = serial
        obj.save()           
        return HttpResponseRedirect('/updates_lote/')
else:
    form = UpdatesLoteForm()    
return render(request, 'lote/updates_lote.html', {'form': form})

相关问题