如何在django中显示表单

时间:2018-02-18 15:04:25

标签: python django

我很少被打扰,因为我在django中的代码无法正常工作,我也不知道为什么。我想创建一个显示在html文件中的表单。当我点击该按钮时,该网址必须将我重定向到我已放置表单代码的html文件中。但是django给我一个错误

from django.db import models
from django.contrib.auth.models import User

class Firma(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Użytkownik")
    nazwa = models.CharField(max_length=250,verbose_name='Nazwa firmy', unique=False)

    class Meta:
        verbose_name = 'Firmę'
        verbose_name_plural = 'Firmy'

    def __str__(self):
        return self.nazwa

class Cudzoziemiec(models.Model):
    OBYWATELSTWA = (
        ('RU', 'Rosja'),
        ('UA', 'Ukraina'),
        ('BY', 'Białoruś'),
        )
    TYTUL_POBYTOWY = (
        ('WZ', 'Wiza'),
        ('KP', 'Karta pobytu')
        )

    user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Użytkownik")
    nazwa = models.ForeignKey(Firma, on_delete=models.CASCADE, verbose_name="Firma")
    obywatelstwo = models.CharField(max_length=250,choices=OBYWATELSTWA, verbose_name="Obywatelstwo")
    imie = models.CharField(max_length=80, verbose_name="Imię", unique=False)
    nazwisko = models.CharField(max_length=150, verbose_name="Nazwisko", unique=False)
    data_ur = models.DateField(auto_now=False, auto_now_add=False, verbose_name="Data urodzenia")
    miejsce_ur = models.CharField(max_length=100, verbose_name="Miejsce urodzenia")
    paszport = models.CharField(max_length=30, verbose_name="Paszport")
    data_start_pasz = models.DateField(auto_now=False, auto_now_add=False, verbose_name="Data wydania paszportu")
    data_koniec_pasz = models.DateField(auto_now=False, auto_now_add=False, verbose_name="Data ważności paszportu")
    dok_pobytowy = models.CharField(max_length=250,choices=TYTUL_POBYTOWY, verbose_name="Tytuł pobytowy")
    data_start_pobyt = models.DateField(auto_now=False, auto_now_add=False, verbose_name="Dokument pobytowy ważny od")
    data_koniec_pobyt = models.DateField(auto_now=False, auto_now_add=False, verbose_name="Dokument pobytowy ważny do")

    class Meta:
        verbose_name = 'Cudzoziemca'
        verbose_name_plural = 'Cudzoziemcy'

    def __str__(self):
        return f'{self.imie} {self.nazwisko}'

我的 models.py 是:

@login_required
def nowy_pracownik(request):
    if request.method == "POST":
        nowy_pracownik = CudzoziemiecForm(request.user, request.POST)
        if nowy_pracownik.is_valid():
            nowy_pracownik.save()
            messages.success(request, 'Pomyślnie dodano pracownika !')
            return render(request, 'cudzoziemiec/nowy_pracownik_ok.html')
    else:
        nowy_pracownik = CudzoziemiecForm(request.user)
    return render(request, 'cudzoziemiec/nowy_pracownik.html', {'nowy_pracownik':nowy_pracownik})

view.py 负责 def 添加新记录:

class FirmaForm(forms.ModelForm):
    class Meta:
        model = Firma
        fields = ('nazwa',)


class CudzoziemiecForm(forms.ModelForm):
    class Meta:
        model = Cudzoziemiec
        fields = ('nazwa','imie', 'nazwisko','obywatelstwo', 'data_ur','paszport', 'data_start_pasz', 'data_koniec_pasz', 'dok_pobytowy', 'data_start_pobyt', 'data_koniec_pobyt')

    def __init__(self, user, *args, **kwargs):            
        super(CudzoziemiecForm, self).__init__(*args, **kwargs)
        self.fields['nazwa'].queryset = user.nazwa_set.all() 
        self.user = user

    def save(self, commit=True):
        instance = super(CudzoziemiecForm, self).save(commit=False)
        instance.user = self.user
        if commit:
            instance.save()
        return instance

最后这是我的 forms.py

self.fields['nazwa'].queryset = user.nazwa_set.all()

错误可能在表单中的某处。第'This deals with Excel already being open or not On Error Resume Next Set xl = GetObject(, "Excel.Application") On Error GoTo 0 If xl Is Nothing Then Set xl = CreateObject("Excel.Application") End If Set XlBook = GetObject(filename) 'filename is the string with the link to the file ("C:/....blahblah.xls") 'Make sure excel is visible on the screen xl.Visible = True XlBook.Windows(1).Visible = True 'xl.ActiveWindow.Zoom = 75 'Define the sheet in the Workbook as XlSheet Set xlsheet1 = XlBook.Worksheets(1) 'Then have some fun! with xlsheet1 .range("A1") = "some data here" .columns("A:A").HorizontalAlignment = xlRight .rows("1:1").font.bold = True end with 'And so on... 行中的类CudzoziemiecForm 中的py

1 个答案:

答案 0 :(得分:2)

在django中,默认反向查找名称为modelname_set。因此,当您尝试获取user.nazwa_set.all()时,这意味着有一些与Nazwa相关的模型User。由于在您的代码中没有名为Nazwa的模型,因此该行会引发错误。我想你的意思是CudzoziemiecFirma所以要解决问题,你需要在表单的user.nazwa_set.all()方法中用user.firma_set.all()替换__init__