【问题标题】:Get the PK of GET Var Upon Submission of Django FormDjango Form提交后获取GET Var的PK
【发布时间】:2013-11-19 17:38:50
【问题描述】:

我目前正在尝试将pathToScan, FKtoTld 字段插入PathsOfDomain。问题是,我希望能够从Tld 表中获取id 字段以获取提交的值(请参阅下面的view),然后使用dbInsert var 提交。问题是EnteredDomain var 下面是为Tld 表中的DomainNm 列输入的值。

我怎样才能获得Tld 中行的id 并将其包含在dbInsert 中?

我有两张桌子:

class Tld(models.Model):
    domainNm = models.CharField(verbose_name="",max_length=40,unique=True,validators=[RegexValidator('^[a-zA-Z0-9]+\.[a-zA-Z]{1,4}$','format: domain.com only','Invalid Entry')])
    FKtoClient = models.ForeignKey(User)  

    def __unicode__(self):
        return (self.domainNm) 

class PathsOfDomain(models.Model):
    pathToScan = models.CharField(max_length=200)
    #urlHttpResponse = models.IntegerField(max_length=3)
    FKtoTld = models.ForeignKey(Tld) # [id] from Tld table

我有一个 Django View:

def Processinitialscan(request):
    # mechanize options here 
    EnteredDomain = request.GET.get('domainNm')

    GetEnteredDomainObjects = Tld.objects.get(DomainNm=EnteredDomain)

    EnteredDomainRowID = GetEnteredDomainObjects.objects.get(pk=GetEnteredDomainObjects)

EnteredDomain 的值可能类似于 - site.com

我有一个循环:在上面view 中导入的类中。

for url in urls:
            mb.open(url)    # mechanize opens each url in urls[]
            beautifulSoupObj = BeautifulSoup(mb.response().read())  #beautifulsoup reads in the mechanize response

            elements = beautifulSoupObj.select("h3.r a")    #get just the elements we want

            #for each element found, insert the 'href' value for pathToScan Field and include
                #PK value (id) field from the submitted domain in table [Tld] into PathsOfDomain - FkToTld field.
                #finally, save this all()
            for element in elements:
                #print(i.attrs["href"])  
                dbInsert = PathsOfDomain(pathToScan=element.attrs["href"],FKtoTld=EnteredDomainRowID)
                dbInsert.save()

非常感谢任何帮助。谢谢。

以上代码当前正在抛出错误: 无法通过 Tld 实例访问管理器 我认为是因为这条线:

EnteredDomainRowID = GetEnteredDomainObjects.objects.get(pk=GetEnteredDomainObjects)

【问题讨论】:

  • 你在使用 Django 模型吗?这些将比架构图更有帮助
  • @Izkata - 请查看更新后的帖子
  • 什么是urls?您是否检查了任何变量以查看哪里出错了?你如何从视图进入循环? ...ETC。我看不出有什么明显错误,所以它可能是您没有向我们展示的代码的一部分 - 看起来您还没有向我们展示很多代码。
  • PathToTldFKId 也从未被定义
  • urls[] 在文件 urldata.py 中定义,该文件包含在 views.py 中。

标签: python mysql django insert crud


【解决方案1】:

无法通过 Tld 实例访问管理器

你说得对,原因在哪里:

GetEnteredDomainObjects = Tld.objects.get(DomainNm=EnteredDomain)

EnteredDomainRowID = GetEnteredDomainObjects.objects.get(pk=GetEnteredDomainObjects)

GetEnteredDomainObjectsTld 的一个实例,因此objects 不可访问。

如果您想从中获取主键,那很简单:

EnteredDomainRowID = GetEnteredDomainObjects.pk

【讨论】:

  • 如何使 EnteredDomainRowID 可用于单独的类文件 (urlsdata.py)?
  • 我知道我可以从视图->模板传递变量,但是从类文件到视图呢?
  • 请说明,我知道它的新奇。
  • 如何将views.py导入urldata.py类?
  • 如果您能在这里帮助我,我将不胜感激。
【解决方案2】:

你真的应该给你的领域起更好的名字。没有理由使用这种缩写格式。请注意,您命名为“FkToTLD”的 Django 字段表示为实际的 TLD 对象,因此最好直接称为 TLD。另外,字段名称和局部变量应该采用lower_case_with_underscore 格式。

您的问题本身很难理解。如果您想从域名中获取 TLD 对象,您可以查找它:

domain = TLD.objects.get(DomainNm=entered_domain)

【讨论】:

  • 感谢您的回复。我想获得 PK-id Tld(id) 值,例如1, 6, 36 .. 任何数值。并在我提交表单时包含这个值 - 使用这个变量 - dbInsert
  • 我目前正在获取 domainNm 的值,但不是 ID 。这说明清楚了吗?
  • 根据您的“域”代码,我如何才能仅访问此 tld 对象的 [id]?
  • 如果您能提出任何关于 django 约定的进一步建议,我将不胜感激
猜你喜欢
  • 1970-01-01
  • 2018-10-27
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多