【问题标题】:Issue with Saving Data into Database in Django using Instance使用实例将数据保存到 Django 中的数据库的问题
【发布时间】:2020-01-25 07:25:56
【问题描述】:

我的代码正在运行,但没有保存到数据库中。我想知道问题出在哪里。但是,我已经尽力检查错误。提交后我收到成功消息。请协助解决问题。您可以从下面附上问题的图片中看到。

models.py

class Info(models.Model):
    MASJID_TYPE = (
        ('Ratibi', 'Ratibi'),
        ('Jummah Masjid', 'Jummah Masjid'),
        ('Central Masjid', 'Central Masjid'),

    )


    SECT = (
        ('Al-Sunnah', 'Al-Sunnah'),
        ('Salafee', 'Salafee'),
        ('Sufi', 'Sufi'),
        ('Ahamadiyah', 'Ahamadiyah'),

    )

    STATUS = (
        ('Completed', 'Complete'),
        ('Un-Completed', 'Un-Completed'),
        ('Proposed', 'Proposed'),


    )


    user = models.ForeignKey(CustomUser, on_delete=models.CASCADE)
    name = models.CharField(max_length=100)
    masjid_type = models.CharField(max_length=50, choices=MASJID_TYPE)
    address = models.TextField()
    sect  = models.CharField(max_length=250, choices=SECT)
    state  = models.CharField(max_length=50)
    city = models.CharField(max_length=50)
    LGA = models.CharField(max_length=50)
    status = models.CharField(max_length=150, choices=STATUS)
    history = models.TextField(blank=False, null=False)
    founder = models.DateField("Founder Year", blank=False, null=False)
    latitude = models.FloatField(max_length=20, blank=False, null=False)
    longitude = models.FloatField(max_length=20, blank=False, null=False)
    congregation = models.IntegerField(blank=False, null=False)
    image = models.ImageField(upload_to='masjid', blank=False, null=False)
    approval = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)




    def __str__(self):
        return self.name


    def get_absolute_url(self):
        return reverse('masjid_detail', kwargs={'pk': self.pk})

class Imam(models.Model):

    CERTIFICATE = (
        ('PhD', 'PhD'),
        ('MSc', 'MSc'),
        ('Bsc', 'Bsc'),

    )

    masjid = models.ForeignKey(Info, on_delete=models.CASCADE)
    first_name = models.CharField(max_length=20)
    last_name = models.CharField(max_length=20)
    imam_address = models.TextField(blank=False, null=False)
    phone_no = models.CharField(max_length=20)
    certificate = models.CharField(max_length=50, choices=CERTIFICATE)
    occupation = models.CharField(max_length=50, blank=False, null=False)
    no_of_wives = models.IntegerField(blank=False, null=False)
    no_of_children = models.IntegerField(blank=False, null=False)
    created_at = models.DateTimeField(auto_now_add=True)
    update_at = models.DateTimeField(auto_now=True)

    def __str__(self):
        return str(self.first_name) + str(self.last_name) + str(self.masjid.name)

view.py

def newImam(request, pk):


    masjid = get_object_or_404(Info, pk=pk)
    masjid_info = masjid.id

    template_name = 'addimam.html'

    if request.method == 'POST': 
        form = ImamForm(request.POST, instance=masjid) 

        if form.is_valid():
            form.save()
            print(form.save)
            messages.success(request, 'The Project Details Has Been Added Successully!')
            return redirect('addimam', masjid.id) 
    else: 
        form = ImamForm(instance=masjid) 

    return render(request, 'addimam.html', {'form' : form,})

forms.py

class ImamForm(forms.ModelForm):


    class Meta:
        model = Imam
        exclude = ('updated_at', 'created_at', 'masjid')

【问题讨论】:

  • 而不是 print(form.save) 使用 print(form.data) 。在控制台中查看:您是否从表单中获取任何数据?

标签: django django-views


【解决方案1】:
def newImam(request, pk):

    masjid = get_object_or_404(Info, pk=pk)

    masjid_info = masjid.id

    template_name = 'addimam.html'

    if request.method == 'POST':
        #form = ImamForm(request.POST, instance=masjid)
        form = ImamForm(request.POST or None)

        if form.is_valid():
            print(form.data)
            form.save(commit=False)
            form.masjid_id = masjid_info

            form.save()

            messages.success(
                request, 'The Project Details Has Been Added Successully!')
            return redirect('addimam', masjid.id)

    else:
        form = ImamForm(instance=masjid)

    return render(request, 'addimam.html', {'form': form})

实际上在这里我们无法发送任何实例,因为没有可供新伊玛目使用的数据。所以你必须直接发送表单数据。

【讨论】:

    猜你喜欢
    • 2022-11-30
    • 1970-01-01
    • 2013-02-28
    • 2017-05-13
    • 2013-06-11
    • 2019-05-12
    • 2023-02-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多