【问题标题】:how can we use more than one class object attributes of one model in another model in Django我们如何在Django的另一个模型中使用一个模型的多个类对象属性
【发布时间】:2020-11-07 04:15:05
【问题描述】:
class Webpage(models.Model):
    topic=models.CharField()
    name=models.CharField(max_length=264,unique=True)
    url=models.URLField(unique=True)

    def __str__(self):
        return self.url,self.name


class AccessRecord(models.Model):
    name=models.ForeignKey(Webpage)
    date=models.DateField()
    urls=models.ForeignKey(Webpage)


    def __str__(self):
        return str(self.date)

如何在“AccessRecord”类中使用“Webpage”类的“name and url”属性

【问题讨论】:

  • 花一点时间来解释一下。我不明白。对不起

标签: python html django class model


【解决方案1】:

如果您的目标是保存用户访问某个页面的事件,则无需创建对模型Webpage 的两个引用即可将nameurls 都保存到AccessRecord 对象。只需创建一个ForeignKey()

class AccessRecord(models.Model):
    webpage=models.ForeignKey(Webpage)
    date=models.DateField()

然后您可以使用点符号访问nameurlWebpage 的任何字段

web_obj = Webpage.objects.create(topic='lorem ipsum', name='google', url='google.com')
obj = AccessRecord.objects.create(webpage=web_obj, date=timezone.now())
obj.webpage.name    # <- will return you 'google'
obj.webpage.url     # <- will return you 'google.com'
obj.webpage.topic   # <- will return you 'lorem ipsum'
obj.date            # <- will return you date object created

当您使用不同的Model.objects 方法时,您也可以使用双_ 表示法。网页url字段过滤访问记录示例

all_google_accesses = AccessRecord.objects.filter(webpage__url='google.com')

【讨论】:

    【解决方案2】:

    为两个或至少一个外键设置相关名称

    class AccessRecord(models.Model):
        name=models.ForeignKey(Webpage)
        date=models.DateField()
        urls=models.ForeignKey(Webpage, related_name='webpage')
    

    这是usage 示例:

    obj.webpage.all()
    

    【讨论】:

    • 当我使用 related_name='webpage' 它返回 self.name 但我想要 urls = Webpage.url
    • 我们可以在单个 django 模型中返回两个字段
    • @PranayReddy 当您在模型中使用ForeignKey() 作为字段时,您将保存您正在引用的对象的id。函数__str__() 用于在您的django 代码或控制台中覆盖对象的默认表示(使其易于测试),但在您的数据库中urlsname 列中的AccessRecord 表中将被放置您正在链接的对象的 id
    • @PranayReddy 当你想链接到 single AccessRecord 对象两个 不同 来自同一模型的对象,在您的情况下为 Webpage
    • @PranayReddy 假设您有两个Webpage 对象:googlefacebook,并且您想创建一个AccessRecord 对象。使用您当前的模型结构,您最终将创建如下对象:{id: 1, name: google, date: ..., urls: 'facebook.com'}——这对我来说似乎完全荒谬
    猜你喜欢
    • 2018-10-16
    • 2020-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-10-14
    • 1970-01-01
    • 2011-07-01
    • 2011-09-19
    相关资源
    最近更新 更多