为了账号安全,请及时绑定邮箱和手机立即绑定

Django ModelFieldChoice 选择传递值

Django ModelFieldChoice 选择传递值

ibeautiful 2023-09-19 14:05:26
您好,我正在使用 ModelFieldChoice 在模型“文章”中设置来自提供者的外键(文章属于提供者)。模板中的选择与数据库中的所有提供程序一起正确显示,但是当我尝试发布表单时,它会抛出一个错误,表明即使我传递了选择值,它也是必需的。此外,我在数据库中为文章设置了值,当我尝试编辑它时,表单中的所有字段都填充了除选择之外的正确数据。这些是我的模型,我将不胜感激的帮助,谢谢!抱歉,如果我做错了什么,这是我第一次在 stackoverflow 上发帖。Article.py 模型class Article(models.Model):     codigo = models.CharField(max_length=100, verbose_name='Codigo')     proveedor = models.ForeignKey(Provider, on_delete=models.CASCADE)     descripcion = models.CharField(max_length=200, verbose_name='Descripcion',null=False, blank=True)     marca = models.CharField(max_length=100, verbose_name='Marca',null=True, blank=True)     rubro = models.CharField(max_length=100, verbose_name='Rubro',null=True, blank=True)     nota = models.TextField(verbose_name='Nota',null=True)     costo = models.CharField(max_length=50, verbose_name='Costo',null=False, blank=True)     created = models.DateTimeField(auto_now_add=True, verbose_name="Fecha de creación",null=True, blank=True)     updated = models.DateTimeField(auto_now=True, verbose_name="Fecha de edición",null=True, blank=True)class Meta:    verbose_name = "articulo"    verbose_name_plural = "articulos"    ordering = ['-descripcion']def __str__(self):    return self.descripcion在views.py中,当我打印“proveedor_id”时,该值正确显示在控制台中,但“is_valid()”失败并打印错误"<ul class="errorlist"><li>proveedor<ul class="errorlist"><li>Este campo es obligatorio.</li></ul></li></ul>"(必填字段,就好像我没有传递它一样)
查看完整描述

1 回答

?
largeQ

TA贡献2039条经验 获得超7个赞

首先,将ArticleCreate序列化器简化为这样:


class ArticleCreate(forms.ModelForm):

  class Meta:

    model = Article

然后在请求传递proveedor字段中,不是proveedor_id. 在 Django/DRF 中,您应该使用"{{association_name}}": id模式传递关联 ID,而不是"{{association_name}}_id": id


所以你也可以简化你的观点:


def add_article(request):

if request.method == 'POST':

  create = ArticleCreate(request.POST)

  if create.is_valid():

    create.save()

  ...


查看完整回答
反对 回复 2023-09-19
  • 1 回答
  • 0 关注
  • 86 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信