Django过滤外键表和主键表的数据

时间:2020-09-19 14:15:56

标签: django database

我有这两个模型

const dailyStockUpdatedBranch = await Branch.findOneAndUpdate(
                { _id: branchId },
                {
                  // $pull: {
                  //   'records.$[record].stocks.$[stock]': stockEntry,
                  // },
                  $set: {
                    region_id:
                      'records.$[record].stocks.$[stock].quantity.P[0]',
                  },
                },
                {
                  arrayFilters: [
                    { 'record.date': date },
                    { 'stock.type': 'DAILY' },
                  ],
                  projection: {
                    'records.stocks': 1,
                    'records.date': 1,
                    totals: 1,
                  },
                }
              );

我要从class Upload(models.Model): name=models.CharField(max_length=100) email=models.EmailField(max_length=50) class Text(models.Model): texts=models.CharField(max_length=500,null=True,blank=True) upload_text=models.ForeignKey(Upload, blank=True, null=True, on_delete = models.CASCADE) 过滤texts时从Text获得name。所以我想显示Uploadnameemail

我知道有人问过previously这个问题,我也在做同样的事情,但是出错了。

我已经尝试过了 texts 但这给我一个错误 data=Text.objects.filter(upload__name__icontains=query)

我也尝试过这个。

Cannot resolve keyword 'upload' into field. Choices are: id, texts, upload_text, upload_text_id

但是我无法在jinja2模板中同时显示两者。

data=Upload.objects.filter(name__icontains=query)
data1=Text.objects.filter(upload_text__in=data)

2 个答案:

答案 0 :(得分:1)

您有一个小错误,而不是upload__nameupload_text__name

data=Text.objects.filter(upload_text__name__icontains=query)

然后,您的模板:

{% for text in data %}
{{ text.texts }} {{ text.upload_text.name }}    | {{text.upload_text.email}}

答案 1 :(得分:0)

我认为您使事情变得太复杂了,您可以使用以下方法获取对象:

class BaseModel extends ChangeNotifier {
  ViewState _state = ViewState.idle;
  ViewState get state => _state;

  void setState(ViewState viewState) {
    _state = viewState;
    notifyListeners();
  }
}

然后在模板中,您可以遍历数据,并使用data = Upload.objects.filter(name__icontains=query).prefetch_related('text_set')获得相关的Text

.text_set
相关问题