質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

6820閲覧

Django: 重複するデータの抽出方法について

donadona

総合スコア19

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/12/27 03:05

Python3.6 Django2.1

以下のような、Userと1:Nでリンクしたデータがあります。

Class Weight(models.Model):   user = models.ForeignKey(User, on_delete=models.CASCADE) date = models.DateField(unique=False) weight = models.DecimalField(max_digit=4, decimal_places=2)

一人のユーザーについて、1日1回だけ体重を登録できるようにしています。
したがって、あるユーザーに着目すると、同じ日付のデータは有りえません。

しかし、何らかの要因で重複したデータが登録されてしまった場合に備えて、
メンテナンス用のページを作成して重複データを抽出・削除できるようにしたいと思っています。

その際に、ユーザー別に、日付が重複データを抽出するクエリをどのように書けばよいかがわからず困っております。

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

これが最適なのかは分かりませんが、

R=[] for u in User.objects.all().select_related(): r = Weight.objects.all().filter(user=u).value('date').annotate(Count('weight')) R.append([u,r])

として、エラーのあるuserと重複したデータの組を取得できました。
ありがとうございました。

投稿2018/12/28 04:55

donadona

総合スコア19

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Djangoについてはよくわからないので、ざっくりとした回答になりますが
一般的にDBでは入力制限をかけるので重複データは登録することができません
もしなんらかの理由で制限がかけられない(もしくはそういう機能がない)場合は
登録後に重複データを検出して削除するのですが、
同じ人で同じ日なので、何か別のカラムの情報で優劣をつけないといけません
つまりはテーブル(データ構造)の作り方次第ということです

投稿2018/12/27 03:41

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

donadona

2018/12/27 23:22

ご回答有り難うございます。 完成した際には、基本的に重複データは存在にないことになりますが、 メンテナンス機能はつけておきたいで。 情報の優劣は、登録日が新しい方を採用するなどで良いかと思っています。 SQL自体がまだ理解が進んでいないので、 Djangoで書く前に、まずはSQLでどう記述するのか調べてみようと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問